From: Sage Weil Date: Thu, 19 Feb 2015 19:02:26 +0000 (-0800) Subject: Merge pull request #3663 from ceph/wip-10765 X-Git-Tag: v0.93~31 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d999ccb263a99bb4b4730040cb8819cfcdb40cbe;p=ceph.git Merge pull request #3663 from ceph/wip-10765 librados: close watch/notify race Reviewed-by: Josh Durgin --- d999ccb263a99bb4b4730040cb8819cfcdb40cbe diff --cc src/osdc/Objecter.cc index af90732f727,e11dcf68da5..d9e57ecd2dc --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@@ -417,9 -417,7 +417,8 @@@ void Objecter::_send_linger(LingerOp *i RWLock::Context lc(rwlock, RWLock::Context::TakenForWrite); vector opv; - Context *onack = NULL; Context *oncommit = NULL; + info->watch_lock.get_read(); // just to read registered status if (info->registered && info->is_watch) { ldout(cct, 15) << "send_linger " << info->linger_id << " reconnect" << dendl; opv.push_back(OSDOp()); @@@ -431,15 -429,13 +430,14 @@@ } else { ldout(cct, 15) << "send_linger " << info->linger_id << " register" << dendl; opv = info->ops; - if (info->on_reg_ack) - onack = new C_Linger_Register(this, info); oncommit = new C_Linger_Commit(this, info); } + info->watch_lock.put_read(); Op *o = new Op(info->target.base_oid, info->target.base_oloc, opv, info->target.flags | CEPH_OSD_FLAG_READ, - onack, oncommit, + NULL, NULL, info->pobjver); + o->oncommit_sync = oncommit; o->snapid = info->snap; o->snapc = info->snapc; o->mtime = info->mtime; @@@ -469,18 -465,8 +467,9 @@@ logger->inc(l_osdc_linger_send); } - void Objecter::_linger_register(LingerOp *info, int r) - { - ldout(cct, 10) << "_linger_register " << info->linger_id << dendl; - if (info->on_reg_ack) { - info->on_reg_ack->complete(r); - info->on_reg_ack = NULL; - } - } - void Objecter::_linger_commit(LingerOp *info, int r) { + RWLock::WLocker wl(info->watch_lock); ldout(cct, 10) << "_linger_commit " << info->linger_id << dendl; if (info->on_reg_commit) { info->on_reg_commit->complete(r);