Project

General

Profile

Bug #14256 ยป bugfix.patch

A fix - Adam Emerson, 01/07/2016 06:55 PM

View differences:

src/osdc/Objecter.cc
cop->put();
}
if (tick_event) {
if (timer.cancel_event(tick_event)) {
if (tick_event.read()) {
if (timer.cancel_event(tick_event.read())) {
ldout(cct, 10) << " successfully canceled tick" << dendl;
tick_event = 0;
}
}
tick_event.set(0);
if (m_request_state_hook) {
AdminSocket* admin_socket = cct->get_admin_socket();
......
// Let go of Objecter write lock so timer thread can shutdown
rwlock.unlock();
assert(tick_event == 0);
// Make sure it didn't get rescheduled
assert(tick_event.read() == 0);
}
void Objecter::_send_linger(LingerOp *info)
......
void Objecter::start_tick()
{
assert(tick_event == 0);
tick_event =
assert(tick_event.read() == 0);
tick_event.set(
timer.add_event(ceph::make_timespan(cct->_conf->objecter_tick_interval),
&Objecter::tick, this);
&Objecter::tick, this));
}
void Objecter::tick()
......
ldout(cct, 10) << "tick" << dendl;
// we are only called by C_Tick
assert(tick_event);
tick_event = 0;
assert(tick_event.read());
tick_event.set(0);
if (!initialized.read()) {
// we raced with shutdown
......
}
}
// reschedule
tick_event = timer.reschedule_me(ceph::make_timespan(
cct->_conf->objecter_tick_interval));
// Make sure we don't resechedule if we wake up after shutdown
if (initialized.read()) {
tick_event.set(timer.reschedule_me(ceph::make_timespan(
cct->_conf->objecter_tick_interval)));
}
}
void Objecter::resend_mon_ops()
......
assert(check_latest_map_ops.empty());
assert(check_latest_map_commands.empty());
assert(!tick_event);
assert(!tick_event.read());
assert(!m_request_state_hook);
assert(!logger);
}
src/osdc/Objecter.h
PerfCounters *logger;
uint64_t tick_event;
atomic_t tick_event;
void start_tick();
void tick();
    (1-1/1)