From: Yehuda Sadeh Date: Wed, 26 Aug 2015 22:08:18 +0000 (-0700) Subject: rgw: delete finisher only after finalizing watches X-Git-Tag: v0.94.4~9^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F6164%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 (cherry picked from commit 97aed59fb9e865d30d31d2b7f4e93fc9727c96fa) --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index e71f6a2a6516..3266eda23a0e 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -1433,11 +1433,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) {