This finisher thread has a lot of callbacks which can hold PGRefs. Make
sure we drain them out before checking that all the PGs have finished
and have no outstanding references.
Moving this should be safe; we've already stopped the op thread et al
and the only things still running are the OSDService's objecter_finisher,
recovery_request_timer, and snap_sleep_timer (which has definitely been emptied
by the time we get here as it's synchronously cleared out on PG shutdown).
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
}
}
-void OSDService::shutdown()
+void OSDService::shutdown_reserver()
{
reserver_finisher.wait_for_empty();
reserver_finisher.stop();
+}
+
+void OSDService::shutdown()
+{
{
Mutex::Locker l(watch_lock);
watch_timer.shutdown();
assert(pg_stat_queue.empty());
}
+ service.shutdown_reserver();
+
// Remove PGs
#ifdef PG_DEBUG_REFS
service.dump_live_pgids();
void init();
void final_init();
void start_shutdown();
+ void shutdown_reserver();
void shutdown();
private: