diff options
Diffstat (limited to 'src/client/Client.cc')
-rw-r--r-- | src/client/Client.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/client/Client.cc b/src/client/Client.cc index baa5dfadde5..3af00f52134 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -272,7 +272,7 @@ void Client::dump_cache() int Client::init() { - Mutex::Locker lock(client_lock); + client_lock.Lock(); assert(!initialized); timer.init(); @@ -283,8 +283,15 @@ int Client::init() messenger->add_dispatcher_head(this); int r = monclient->init(); - if (r < 0) + if (r < 0) { + // need to do cleanup because we're in an intermediate init state + timer.shutdown(); + client_lock.Unlock(); + objectcacher->stop(); + monclient->shutdown(); + messenger->shutdown(); return r; + } objecter->init(); @@ -303,6 +310,7 @@ int Client::init() cct->get_perfcounters_collection()->add(logger); initialized = true; + client_lock.Unlock(); return r; } |