From 8c30d33f074e35b4a1cff66b937e20efa493dd5c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 20 Apr 2009 16:14:52 -0700 Subject: [PATCH] mds: only delete mds on clean shutdown This avoids bad asserts on suicide, but still lets us find memory leaks on clean shutdowns. --- src/cmds.cc | 6 ++++-- src/mds/MDS.cc | 9 +++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/cmds.cc b/src/cmds.cc index 7b929d164ccd1..a1603dd317142 100644 --- a/src/cmds.cc +++ b/src/cmds.cc @@ -97,8 +97,10 @@ int main(int argc, const char **argv) mds->mds_lock.Lock(); mds->mds_lock.Unlock(); - // done - delete mds; + // only delete if it was a clean shutdown (to aid memory leak + // detection, etc.). don't bother if it was a suicide. + if (mds->is_stopped()) + delete mds; // cd on exit, so that gmon.out (if any) goes into a separate directory for each node. char s[20]; diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index f03ed4d0f0ca7..a4f17038f1226 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -1056,8 +1056,13 @@ void MDS::stopping_done() void MDS::suicide() { - dout(1) << "suicide" << dendl; - state = MDSMap::STATE_STOPPED; // well, maybe failed, but close enough. + if (want_state == MDSMap::STATE_STOPPED) + state = want_state; + else + state = CEPH_MDS_STATE_DNE; // whatever. + + dout(1) << "suicide. wanted " << ceph_mds_state_name(want_state) + << ", now " << ceph_mds_state_name(state) << dendl; // stop timers if (beacon_killer) { -- 2.39.5