]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix sub_op_push wakeup on pulled object
authorSage Weil <sage@newdream.net>
Thu, 4 Jun 2009 18:00:47 +0000 (11:00 -0700)
committerSage Weil <sage@newdream.net>
Thu, 4 Jun 2009 18:00:47 +0000 (11:00 -0700)
soid was a ref to op->.. move delete op to the end.

src/osd/ReplicatedPG.cc

index 576ce9800746e96043b7bc053cbefa81690eaa7f..80dd2e6d9852dd3b273d49ebb67dbfc2339e9148 100644 (file)
@@ -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<sobject_t,list<class Message*> >::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!
 }