From 7109de7b80cd50e6ae121eb9e3af033de21896da Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Tue, 23 Feb 2016 12:17:50 +0800 Subject: [PATCH] RadosClient: call watch_flush before finisher stop Signed-off-by: Haomai Wang --- src/librados/RadosClient.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 7b089907bbe7..38dcb092dfa8 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(); -- 2.47.3