a few more EPA tweaks (from 2.X)
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 23 Dec 2010 14:23:31 +0000 (14:23 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 23 Dec 2010 14:23:31 +0000 (14:23 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@8340 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/audioengine.cc
libs/pbd/epa.cc
libs/pbd/pbd/epa.h

index 9feb87ba95440370ea53ee6d7c37fe9f0084e350..683dbca422372098182de0dc44219703f47631af 100644 (file)
@@ -1263,12 +1263,14 @@ AudioEngine::connect_to_jack (string client_name, string session_uuid)
        const char *server_name = NULL;
 
         EnvironmentalProtectionAgency* global_epa = EnvironmentalProtectionAgency::get_global_epa ();
-        EnvironmentalProtectionAgency current_epa; // saves current settings and restores on exit from this scope
+        EnvironmentalProtectionAgency current_epa (false);
 
         /* revert all environment settings back to whatever they were when ardour started
          */
 
         if (global_epa) {
+                current_epa.arm ();
+                current_epa.save ();
                 global_epa->restore ();
         }
 
index 71387b4c23ab37b34c05f4c4595fde71297f83a4..8665823d771872fc0de7973986f3d21da501da18 100644 (file)
@@ -29,14 +29,25 @@ using namespace std;
 
 EnvironmentalProtectionAgency* EnvironmentalProtectionAgency::_global_epa = 0;
 
-EnvironmentalProtectionAgency::EnvironmentalProtectionAgency ()
+EnvironmentalProtectionAgency::EnvironmentalProtectionAgency (bool arm)
+        : _armed (arm)
 {
-        save ();
+        if (_armed) {
+                save ();
+        }
 }
 
 EnvironmentalProtectionAgency::~EnvironmentalProtectionAgency()
 {
-        restore ();
+        if (_armed) {
+                restore ();
+        }
+}
+
+void
+EnvironmentalProtectionAgency::arm ()
+{
+        _armed = true;
 }
 
 void
@@ -63,9 +74,9 @@ EnvironmentalProtectionAgency::save ()
         }
 }                         
 void
-EnvironmentalProtectionAgency::restore ()
+EnvironmentalProtectionAgency::restore () const
 {
-        for (map<string,string>::iterator i = e.begin(); i != e.end(); ++i) {
+        for (map<string,string>::const_iterator i = e.begin(); i != e.end(); ++i) {
                 cerr << "Restore [" << i->first << "] = " << i->second << endl;
                 setenv (i->first.c_str(), i->second.c_str(), 1);
         }
index 39773313ecee74f38e76bdce2df9fef7bf999943..b2708fbd4cc9617ef90b63784fed329d343fe4b6 100644 (file)
@@ -27,16 +27,18 @@ namespace PBD {
 
 class EnvironmentalProtectionAgency {
   public:
-    EnvironmentalProtectionAgency ();
+    EnvironmentalProtectionAgency (bool arm=true);
     ~EnvironmentalProtectionAgency ();
 
-    void restore ();
+    void arm ();
     void save ();
+    void restore () const;
 
     static EnvironmentalProtectionAgency* get_global_epa () { return _global_epa; }
     static void set_global_epa (EnvironmentalProtectionAgency* epa) { _global_epa = epa; }
 
   private:
+    bool _armed;
     std::map<std::string,std::string> e;
     static EnvironmentalProtectionAgency* _global_epa;
 };