]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: Mods to fix #3184 for messenger shutdown
authorSam Lang <sam.lang@inktank.com>
Mon, 24 Sep 2012 20:31:15 +0000 (13:31 -0700)
committerSam Lang <sam.lang@inktank.com>
Thu, 27 Sep 2012 21:34:29 +0000 (14:34 -0700)
This moves the shutdown of the messenger outside of the client
to be able to handle error cases more appropriately.

Signed-off-by: Sam Lang <sam.lang@inktank.com>
src/ceph_fuse.cc
src/ceph_syn.cc
src/client/Client.cc
src/client/ldceph.cc
src/libcephfs.cc

index e1b96550b1acd9202bfe9cd3dc4934e56f153cac..2ad6d3bff357c5647bd24114ecadddb50b5d147e 100644 (file)
@@ -162,6 +162,7 @@ int main(int argc, const char **argv, const char *envp[]) {
     client->shutdown();
   out_init_failed:
     // wait for messenger to finish
+    messenger->shutdown();
     messenger->wait();
   out_messenger_start_failed:
     delete client;
index 7cb0ab3ce91a421a80e3a790fedda3daf6914054..199be0eff620299c49e524f2a4451483a338f1ac 100644 (file)
@@ -101,6 +101,7 @@ int main(int argc, const char **argv, char *envp[])
   for (int i = 0; i < g_conf->num_client; ++i) {
     // wait for messenger to finish
     delete mclients[i];
+    messengers[i]->shutdown();
     messengers[i]->wait();
     delete messengers[i];
   }
index 62eb940e163da67a7e47d397282f2d900eae8837..a99faabd36c1556f45d4e75a87b0519c3e01ccb3 100644 (file)
@@ -286,7 +286,6 @@ int Client::init()
     client_lock.Unlock();
     objectcacher->stop();
     monclient->shutdown();
-    messenger->shutdown();
     return r;
   }
 
@@ -325,7 +324,6 @@ void Client::shutdown()
   objecter->shutdown();
   client_lock.Unlock();
   monclient->shutdown();
-  messenger->shutdown();
 
   if (logger) {
     cct->get_perfcounters_collection()->remove(logger);
index d8f672433c8f202fe83fa200609e516cc15dbd8e..255961e559e922633e0bf6604de7755922f49d3e 100644 (file)
@@ -141,7 +141,12 @@ public:
     rank.start_rank();
     
     client = new Client(rank.register_entity(entity_name_t(entity_name_t::TYPE_CLIENT,-1)), &monmap);
-    client->init();
+    r = client->init();
+    if (r < 0) {
+      cerr << "ldceph init: client init failed " << r << std::endl;
+      delete client;
+    }
+
     r = client->mount();
     if (r < 0) {
       // failure
index 2e3c7d45c504d92e894e1cffb071faa36d9381b1..0400a2b0e3dbd016f143c45970ea300a5862824f 100644 (file)
@@ -118,6 +118,7 @@ public:
       client = NULL;
     }
     if (messenger) {
+      messenger->shutdown();
       messenger->wait();
       delete messenger;
       messenger = NULL;