]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cephtool: fix timer init/destruction
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 2 Nov 2010 20:20:39 +0000 (13:20 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 4 Nov 2010 04:40:24 +0000 (21:40 -0700)
Signed-off-by: Colin McCabe <colinm@hq.newdream.net>
src/tools/ceph.cc

index 627dcbf80d09367b429fec06b3eac0ba934689c1..f0575fa4cd5c0bba828584a9110e3c9534cb5e3f 100644 (file)
@@ -34,6 +34,7 @@ using namespace std;
 #include <envz.h>
 #endif // DARWIN
 
+#include <memory>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -55,7 +56,7 @@ struct ceph_tool_data g;
 
 static Cond cmd_cond;
 static SimpleMessenger *messenger = 0;
-static SafeTimer timer(g.lock);
+static std::auto_ptr < SafeTimer > timer;
 static Tokenizer *tok;
 
 static const char *outfile = 0;
@@ -282,7 +283,7 @@ static void send_observe_requests()
   registered.clear();
   float seconds = g_conf.paxos_observer_timeout/2;
   dout(1) << " refresh after " << seconds << " with same mon" << dendl;
-  timer.add_event_after(seconds, new C_ObserverRefresh(false));
+  timer->add_event_after(seconds, new C_ObserverRefresh(false));
 }
 
 static void handle_ack(MMonCommandAck *ack)
@@ -295,7 +296,7 @@ static void handle_ack(MMonCommandAck *ack)
   reply_bl = ack->get_data();
   cmd_cond.Signal();
   if (resend_event) {
-    timer.cancel_event(resend_event);
+    timer->cancel_event(resend_event);
     resend_event = 0;
   }
   g.lock.Unlock();
@@ -539,6 +540,7 @@ int main(int argc, const char **argv)
   
   common_set_defaults(false);
   common_init(args, "ceph", true);
+  timer.reset(new SafeTimer(g.lock));
 
   vec_to_argv(args, argc, argv);
 
@@ -682,6 +684,7 @@ int main(int argc, const char **argv)
   // wait for messenger to finish
   messenger->wait();
   messenger->destroy();
+  timer->shutdown();
   tok_end(tok);
   return ret;
 }