From e3105a06df9f2e7e5388d051f8938441c95a08b0 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Tue, 16 Jun 2009 15:49:34 -0700 Subject: [PATCH] Objecter: fixed a bug in snaps. Worked around a situtation where you could delete a callback before it was followed. --- src/osdc/Objecter.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 09179dc8f41cb..79da15aefb5a3 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -581,14 +581,17 @@ void Objecter::handle_pool_snap_reply(MPoolSnapReply *m) { SnapOp *op = op_snap[tid]; dout(10) << "have request " << tid << " at " << op << " Create: " << op->create << dendl; *(op->replyCode) = m->replyCode; - if (osdmap->get_epoch() < m->epoch) + if (osdmap->get_epoch() < m->epoch) { + dout(20) << "waiting for client to reach epoch " << m->epoch << " before calling back" << dendl; wait_for_new_map(op->onfinish, m->epoch); + } else { op->onfinish->finish(0); delete op->onfinish; } - op_snap.erase(tid); + op->onfinish = NULL; delete op; + op_snap.erase(tid); } else { dout(10) << "unknown request " << tid << dendl; } -- 2.39.5