From: Haomai Wang Date: Tue, 23 Feb 2016 04:17:50 +0000 (+0800) Subject: RadosClient: call watch_flush before finisher stop X-Git-Tag: v10.1.0~321^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7109de7b80cd50e6ae121eb9e3af033de21896da;p=ceph.git RadosClient: call watch_flush before finisher stop Signed-off-by: Haomai Wang --- diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 7b089907bbe..38dcb092dfa 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -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();