]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Logger.cc: avoid creating SafeTimer in global-ctor
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 2 Nov 2010 20:01:18 +0000 (13:01 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 4 Nov 2010 04:40:23 +0000 (21:40 -0700)
Don't create a SafeTimer at global constructor time. Timers
contain a Thread, and the library stuff may not have been initialized at
global constructor time. Instead, just create the timer when we need it,
in flush_all_loggers.

Signed-off-by: Colin McCabe <colinm@hq.newdream.net>
src/common/Logger.cc

index f9ddb025350df820f13f92c103359957a058fa3d..1a9b20b9428d541d0dfdd2789fa9ca8806c626dc 100644 (file)
@@ -20,6 +20,7 @@
 #include "Logger.h"
 
 #include <iostream>
+#include <memory>
 #include "Clock.h"
 
 #include "config.h"
@@ -31,7 +32,7 @@
 
 // per-process lock.  lame, but this way I protect LogType too!
 Mutex logger_lock("logger_lock");
-SafeTimer logger_timer(logger_lock);
+std::auto_ptr < SafeTimer >logger_timer;
 Context *logger_event = 0;
 list<Logger*> logger_list;
 utime_t start;
@@ -172,12 +173,14 @@ static void flush_all_loggers()
                   << "  next=" << next 
                   << dendl;
   logger_event = new C_FlushLoggers;
-  logger_timer.add_event_at(next, logger_event);
+  if (!logger_timer.get())
+    logger_timer.reset(new SafeTimer(logger_lock));
+  logger_timer->add_event_at(next, logger_event);
 }
 
 static void stop()
 {
-  logger_timer.shutdown();
+  logger_timer.reset(NULL);
 }