From: Yehuda Sadeh Date: Wed, 26 Aug 2015 22:08:18 +0000 (-0700) Subject: rgw: delete finisher only after finalizing watches X-Git-Tag: v9.1.0~271^2^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F5678%2Fhead;p=ceph.git rgw: delete finisher only after finalizing watches Fixes: #12208 The watch error path might try to schedule a finisher work, delete finisher only after watch destruction. Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index b5c359fa941e..cc0481d45452 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -1432,11 +1432,17 @@ void RGWRados::finalize() { if (finisher) { finisher->stop(); - delete finisher; } if (need_watch_notify()) { finalize_watch(); } + if (finisher) { + /* delete finisher only after cleaning up watches, as watch error path might call + * into finisher. We stop finisher before finalizing watch to make sure we don't + * actually handle any racing work + */ + delete finisher; + } delete meta_mgr; delete data_log; if (use_gc_thread) {