Fix static initialization order problem
authorSakari Bergen <sakari.bergen@beatwaves.net>
Sun, 24 Mar 2013 19:18:20 +0000 (21:18 +0200)
committerSakari Bergen <sakari.bergen@beatwaves.net>
Sun, 24 Mar 2013 19:18:20 +0000 (21:18 +0200)
libs/pbd/debug.cc

index 98d0fc5091e77265380b36044954db437d40e3ab..c86afbe87e723b74205f1cef1483d3c060b9b7b7 100644 (file)
@@ -34,7 +34,11 @@ static uint64_t _debug_bit = 1;
 typedef std::map<const char*,uint64_t> DebugMap;
 
 namespace PBD {
-       DebugMap _debug_bit_map;
+       DebugMap & _debug_bit_map()
+       {
+               static DebugMap map;
+               return map;
+       }
 }
 
 uint64_t PBD::DEBUG::Stateful = PBD::new_debug_bit ("stateful");
@@ -50,7 +54,7 @@ uint64_t
 PBD::new_debug_bit (const char* name)
 {
         uint64_t ret;
-        _debug_bit_map.insert (make_pair (name, _debug_bit));
+        _debug_bit_map().insert (make_pair (name, _debug_bit));
         ret = _debug_bit;
         _debug_bit <<= 1;
         return ret;
@@ -91,7 +95,7 @@ PBD::parse_debug_options (const char* str)
                        return 0;
                }
 
-                for (map<const char*,uint64_t>::iterator i = _debug_bit_map.begin(); i != _debug_bit_map.end(); ++i) {
+               for (map<const char*,uint64_t>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
                         if (strncasecmp (p, i->first, strlen (p)) == 0) {
                                 bits |= i->second;
                         }
@@ -113,7 +117,7 @@ PBD::list_debug_options ()
 
        vector<string> options;
 
-        for (map<const char*,uint64_t>::iterator i = _debug_bit_map.begin(); i != _debug_bit_map.end(); ++i) {
+       for (map<const char*,uint64_t>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
                options.push_back (i->first);
         }