jewel: Fix shutting down mds timed-out due to deadlock
Reviewed-by: Greg Farnum <gfarnum@redhat.com>
progress_thread.shutdown();
+ // release mds_lock for finisher/messenger threads (e.g.
+ // MDSDaemon::ms_handle_reset called from Messenger).
+ mds_lock.Unlock();
+
+ finisher->stop(); // no flushing
+
// shut down messenger
+ // release mds_lock first because messenger thread might call
+ // MDSDaemon::ms_handle_reset which will try to hold mds_lock
+ mds_lock.Unlock();
messenger->shutdown();
+ mds_lock.Lock();
+ mds_lock.Lock();
+
// Workaround unclean shutdown: HeartbeatMap will assert if
// worker is not removed (as we do in ~MDS), but ~MDS is not
// always called after suicide.