From 95392b3a6d2693d4c5b884e1f0677832745d9e85 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 4 Jun 2009 11:00:47 -0700 Subject: [PATCH] osd: fix sub_op_push wakeup on pulled object soid was a ref to op->.. move delete op to the end. --- src/osd/ReplicatedPG.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 576ce9800746e..80dd2e6d9852d 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2725,13 +2725,21 @@ void ReplicatedPG::sub_op_push(MOSDSubOp *op) osd->messenger->send_message(reply, op->get_source_inst()); } - delete op; - // kick waiters if (waiting_for_missing_object.count(soid)) { + dout(20) << " kicking waiters on " << soid << dendl; osd->take_waiters(waiting_for_missing_object[soid]); waiting_for_missing_object.erase(soid); + } else { + dout(20) << " no waiters on " << soid << dendl; + /*for (hash_map >::iterator p = waiting_for_missing_object.begin(); + p != waiting_for_missing_object.end(); + p++) + dout(20) << " " << p->first << dendl; + */ } + + delete op; // at the end... soid is a ref to op->soid! } -- 2.39.5