From: Sage Weil Date: Mon, 20 Apr 2009 23:14:52 +0000 (-0700) Subject: mds: only delete mds on clean shutdown X-Git-Tag: v0.7.3~90 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8c30d33f074e35b4a1cff66b937e20efa493dd5c;p=ceph.git mds: only delete mds on clean shutdown This avoids bad asserts on suicide, but still lets us find memory leaks on clean shutdowns. --- diff --git a/src/cmds.cc b/src/cmds.cc index 7b929d164ccd..a1603dd31714 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 f03ed4d0f0ca..a4f17038f122 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) {