From e1eebb32de81542d6f6405f090c903eb1153c447 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 12 Mar 2015 11:20:40 +0800 Subject: [PATCH] osd: refactor RepScrubWQ::_process() use Mutex::Locker instead of releasing the lock manually. Signed-off-by: Kefu Chai --- src/osd/OSD.h | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/osd/OSD.h b/src/osd/OSD.h index f03259843dc5..c8e5b8fbe580 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -2173,22 +2173,20 @@ protected: void _process( MOSDRepScrub *msg, ThreadPool::TPHandle &handle) { - osd->osd_lock.Lock(); - if (osd->is_stopping()) { - msg->put(); - osd->osd_lock.Unlock(); - return; - } - if (osd->_have_pg(msg->pgid)) { - PG *pg = osd->_lookup_lock_pg(msg->pgid); - osd->osd_lock.Unlock(); - pg->replica_scrub(msg, handle); - msg->put(); - pg->unlock(); - } else { - msg->put(); - osd->osd_lock.Unlock(); + PG *pg = NULL; + { + Mutex::Locker lock(osd->osd_lock); + if (osd->is_stopping() || + !osd->_have_pg(msg->pgid)) { + msg->put(); + return; + } + pg = osd->_lookup_lock_pg(msg->pgid); } + assert(pg); + pg->replica_scrub(msg, handle); + msg->put(); + pg->unlock(); } void _clear() { while (!rep_scrub_queue.empty()) { -- 2.47.3