]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD::shutdown: actually drop sessions waiting on map
authorSamuel Just <sam.just@inktank.com>
Mon, 4 Aug 2014 22:31:06 +0000 (15:31 -0700)
committerSamuel Just <sam.just@inktank.com>
Thu, 7 Aug 2014 18:48:54 +0000 (11:48 -0700)
There might be messages for which we still don't have the
map.  Dispatching waiting won't actually help.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc
src/osd/OSD.h

index 75f975a5399177eebaf852829466acd22770be2c..9ac8481a09af295880ad23bfe03c35a8c8c47b99 100644 (file)
@@ -2358,7 +2358,7 @@ int OSD::shutdown()
 
   service.start_shutdown();
 
-  dispatch_sessions_waiting_on_map();
+  clear_waiting_sessions();
 
   // Shutdown PGs
   {
index 077702e0a1eca30c62b4a7cae871a1f604b33730..1f9a14479d21ffdf7da08d4409e87ec5a9816fdf 100644 (file)
@@ -1166,6 +1166,22 @@ public:
 
   Mutex session_waiting_lock;
   set<Session*> session_waiting_for_map;
+
+  void clear_waiting_sessions() {
+    Mutex::Locker l(session_waiting_lock);
+    for (map<spg_t, set<Session*> >::iterator i =
+          session_waiting_for_pg.begin();
+        i != session_waiting_for_pg.end();
+        ++i) {
+      for (set<Session*>::iterator j = i->second.begin();
+          j != i->second.end();
+          ++j) {
+       (*j)->put();
+      }
+    }
+    session_waiting_for_pg.clear();
+  }
+
   /// Caller assumes refs for included Sessions
   void get_sessions_waiting_for_map(set<Session*> *out) {
     Mutex::Locker l(session_waiting_lock);