]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: hold lock while testing state variable
authorJason Dillaman <dillaman@redhat.com>
Wed, 13 Jan 2016 01:35:06 +0000 (20:35 -0500)
committerJason Dillaman <dillaman@redhat.com>
Wed, 13 Jan 2016 14:54:29 +0000 (09:54 -0500)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librados/RadosClient.cc

index 1acde03ae21ea9716d411d53efba5d8a36d8a80f..cc8943d9098358bb010dacb196cd106ba569b90a 100644 (file)
@@ -409,6 +409,7 @@ bool librados::RadosClient::ms_dispatch(Message *m)
 {
   bool ret;
 
+  Mutex::Locker l(lock);
   if (state == DISCONNECTED) {
     ldout(cct, 10) << "disconnected, discarding " << *m << dendl;
     m->put();
@@ -435,12 +436,11 @@ void librados::RadosClient::ms_handle_remote_reset(Connection *con)
 
 bool librados::RadosClient::_dispatch(Message *m)
 {
+  assert(lock.is_locked());
   switch (m->get_type()) {
   // OSD
   case CEPH_MSG_OSD_MAP:
-    lock.Lock();
     cond.Signal();
-    lock.Unlock();
     m->put();
     break;
 
@@ -873,7 +873,7 @@ int librados::RadosClient::monitor_log(const string& level, rados_log_callback_t
 
 void librados::RadosClient::handle_log(MLog *m)
 {
-  Mutex::Locker l(lock);
+  assert(lock.is_locked());
   ldout(cct, 10) << __func__ << " version " << m->version << dendl;
 
   if (log_last_version < m->version) {