summaryrefslogtreecommitdiff
path: root/src/client/Client.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/Client.cc')
-rw-r--r--src/client/Client.cc12
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;
}