diff --git a/src/rgw/rgw_lc.cc b/src/rgw/rgw_lc.cc index 0e8df5ed333..8876f6330ce 100644 --- a/src/rgw/rgw_lc.cc +++ b/src/rgw/rgw_lc.cc @@ -474,6 +474,7 @@ void RGWLC::start_processor() void RGWLC::stop_processor() { + down_flag.set(1); if (worker) { worker->stop(); worker->join(); @@ -490,7 +491,7 @@ void RGWLC::LCWorker::stop() bool RGWLC::going_down() { - return false; + return (down_flag.read() != 0); } bool RGWLC::LCWorker::should_work(utime_t& now) diff --git a/src/rgw/rgw_lc.h b/src/rgw/rgw_lc.h index 0c4126c1ece..30d2f2b0223 100644 --- a/src/rgw/rgw_lc.h +++ b/src/rgw/rgw_lc.h @@ -179,6 +179,7 @@ class RGWLC { RGWRados *store; int max_objs; string *obj_names; + atomic_t down_flag; class LCWorker : public Thread { CephContext *cct; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index f25592a7198..3e0a55b0449 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -3176,6 +3176,12 @@ void RGWRados::finalize() delete gc; gc = NULL; + if (use_lc_thread) { + lc->stop_processor(); + } + delete lc; + lc = NULL; + delete obj_expirer; obj_expirer = NULL;