]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
RadosClient: call watch_flush before finisher stop 7649/head
authorHaomai Wang <haomai@xsky.com>
Tue, 23 Feb 2016 04:17:50 +0000 (12:17 +0800)
committerHaomai Wang <haomai@xsky.com>
Wed, 24 Feb 2016 01:29:05 +0000 (09:29 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/librados/RadosClient.cc

index 7b089907bbe7888d4a6c77f7337093a32c29a16d..38dcb092dfa8818bb1594a463a6dda0cc432e216 100644 (file)
@@ -329,21 +329,25 @@ void librados::RadosClient::shutdown()
     lock.Unlock();
     return;
   }
-  if (state == CONNECTED) {
-    finisher.wait_for_empty();
-    finisher.stop();
-  }
+
   bool need_objecter = false;
   if (objecter && objecter->initialized.read()) {
     need_objecter = true;
   }
+
+  if (state == CONNECTED) {
+    if (need_objecter) {
+      // make sure watch callbacks are flushed
+      watch_flush();
+    }
+    finisher.wait_for_empty();
+    finisher.stop();
+  }
   state = DISCONNECTED;
   instance_id = 0;
   timer.shutdown();   // will drop+retake lock
   lock.Unlock();
   if (need_objecter) {
-    // make sure watch callbacks are flushed
-    watch_flush();
     objecter->shutdown();
   }
   monclient.shutdown();