From 060fd42810ceb73b1db21e1802ec603b748dd3ae Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 15 Dec 2010 15:22:32 -0800 Subject: [PATCH] osd: fix watch timer, locking --- src/osd/OSD.cc | 8 +++++++- src/osd/ReplicatedPG.cc | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 5e9af33531068..ca0366527b87b 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -459,6 +459,7 @@ int OSD::init() Mutex::Locker lock(osd_lock); timer.init(); + watch_timer.init(); watch = new Watch(); // mount. @@ -654,6 +655,10 @@ int OSD::shutdown() timer.shutdown(); + watch_lock.Lock(); + watch_timer.shutdown(); + watch_lock.Unlock(); + heartbeat_lock.Lock(); heartbeat_stop = true; heartbeat_cond.Signal(); @@ -1757,7 +1762,8 @@ void OSD::handle_notify_timeout(void *_notif) ReplicatedPG *pg = (ReplicatedPG *)lookup_lock_raw_pg(notif->pgid); pg_t pgid = notif->pgid; pg->do_complete_notify(notif, obc); - put_object_context(obc, notif->pgid); + pg->put_object_context(obc); + pg->unlock(); watch_lock.Lock(); /* exiting with watch_lock held */ diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 555e34144cf28..eae2d8d424869 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1222,6 +1222,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops, Watch::Notification *notif = osd->watch->get_notif(op.watch.cookie); if (!notif) { + osd->watch_lock.Unlock(); result = -EINVAL; break; } -- 2.39.5