hb_back_server_messenger(hb_back_serverm),
heartbeat_thread(this),
heartbeat_dispatcher(this),
- finished_lock("OSD::finished_lock"),
op_tracker(cct, cct->_conf->osd_enable_op_tracker,
cct->_conf->osd_num_op_tracker_shard),
test_ops_hook(NULL),
// finish ops
op_shardedwq.drain(); // should already be empty except for laggard PGs
{
- Mutex::Locker l(finished_lock);
finished.clear(); // zap waiters (bleh, this is messy)
}
assert(osd_lock.is_locked());
dout(10) << "do_waiters -- start" << dendl;
- finished_lock.Lock();
while (!finished.empty()) {
OpRequestRef next = finished.front();
finished.pop_front();
- finished_lock.Unlock();
dispatch_op(next);
- finished_lock.Lock();
}
- finished_lock.Unlock();
dout(10) << "do_waiters -- finish" << dendl;
}
private:
// -- waiters --
list<OpRequestRef> finished;
- Mutex finished_lock;
void take_waiters(list<OpRequestRef>& ls) {
- finished_lock.Lock();
+ assert(osd_lock.is_locked());
finished.splice(finished.end(), ls);
- finished_lock.Unlock();
}
void do_waiters();