From: Samuel Just Date: Mon, 4 Aug 2014 22:31:06 +0000 (-0700) Subject: OSD::shutdown: actually drop sessions waiting on map X-Git-Tag: v0.85~72^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=11cefcab239cd7fbb1a98c96ee2bb2946851387f;p=ceph.git OSD::shutdown: actually drop sessions waiting on map There might be messages for which we still don't have the map. Dispatching waiting won't actually help. Signed-off-by: Samuel Just --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 75f975a53991..9ac8481a09af 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2358,7 +2358,7 @@ int OSD::shutdown() service.start_shutdown(); - dispatch_sessions_waiting_on_map(); + clear_waiting_sessions(); // Shutdown PGs { diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 077702e0a1ec..1f9a14479d21 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1166,6 +1166,22 @@ public: Mutex session_waiting_lock; set session_waiting_for_map; + + void clear_waiting_sessions() { + Mutex::Locker l(session_waiting_lock); + for (map >::iterator i = + session_waiting_for_pg.begin(); + i != session_waiting_for_pg.end(); + ++i) { + for (set::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 *out) { Mutex::Locker l(session_waiting_lock);