Do not call init() while initialized; do not call shutdown unless
initialized.
Drop incoming messages if not initialized (we are probably racing with
shutdown).
Signed-off-by: Sage Weil <sage@newdream.net>
int Client::init()
{
Mutex::Locker lock(client_lock);
+ assert(!initialized);
+
timer.init();
objectcacher->start();
logger = plb.create_perf_counters();
cct->get_perfcounters_collection()->add(logger);
+ initialized = true;
return r;
}
objectcacher->stop(); // outside of client_lock! this does a join.
client_lock.Lock();
+ assert(initialized);
+ initialized = false;
timer.shutdown();
objecter->shutdown();
client_lock.Unlock();
bool Client::ms_dispatch(Message *m)
{
client_lock.Lock();
+ if (!initialized) {
+ ldout(cct, 10) << "inactive, discarding " << *m << dendl;
+ m->put();
+ return true;
+ }
switch (m->get_type()) {
// osd
void handle_client_request_forward(MClientRequestForward *reply);
void handle_client_reply(MClientReply *reply);
+ bool initialized;
bool mounted;
bool unmounting;