]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon: shutdown messenger early to avoid accessing deleted logger
authorningtao <ningtao@sangfor.com.cn>
Thu, 3 Jan 2019 15:20:12 +0000 (23:20 +0800)
committerningtao <ningtao@sangfor.com.cn>
Thu, 3 Jan 2019 15:20:12 +0000 (23:20 +0800)
In the monitor shutdown process, the MSG thread exits after the logger is released,
causing the null pointer to be accessed. So move the logger release to the MSG thread after it exits

Fixes: http://tracker.ceph.com/issues/37780
Signed-off-by: ningtao <ningtao@sangfor.com.cn>
src/mon/Monitor.cc

index 2dc44ac82953def8c0cd84588c27db1ffa0bab10..6c43817b1556a38eefade174c61b05cae6eaa618 100644 (file)
@@ -986,6 +986,16 @@ void Monitor::shutdown()
 
   remove_all_sessions();
 
+  log_client.shutdown();
+
+  // unlock before msgr shutdown...
+  lock.Unlock();
+
+  // shutdown messenger before removing logger from perfcounter collection, 
+  // otherwise _ms_dispatch() will try to update deleted logger
+  messenger->shutdown();
+  mgr_messenger->shutdown();
+
   if (logger) {
     cct->get_perfcounters_collection()->remove(logger);
     delete logger;
@@ -997,14 +1007,6 @@ void Monitor::shutdown()
     delete cluster_logger;
     cluster_logger = NULL;
   }
-
-  log_client.shutdown();
-
-  // unlock before msgr shutdown...
-  lock.Unlock();
-
-  messenger->shutdown();  // last thing!  ceph_mon.cc will delete mon.
-  mgr_messenger->shutdown();
 }
 
 void Monitor::wait_for_paxos_write()