async_msgr->ms_deliver_handle_fast_connect(this);
// make sure no pending tick timer
- center->delete_time_event(last_tick_id);
+ if (last_tick_id)
+ center->delete_time_event(last_tick_id);
last_tick_id = center->create_time_event(inactive_timeout_us, tick_handler);
// message may in queue between last _try_send and connection ready
if (delay_state)
assert(delay_state->ready());
// make sure no pending tick timer
- center->delete_time_event(last_tick_id);
+ if (last_tick_id)
+ center->delete_time_event(last_tick_id);
last_tick_id = center->create_time_event(inactive_timeout_us, tick_handler);
write_lock.Lock();
<< " last_active" << last_active << dendl;
assert(last_tick_id == id);
Mutex::Locker l(lock);
+ last_tick_id = 0;
auto idle_period = std::chrono::duration_cast<std::chrono::microseconds>(now - last_active).count();
if (inactive_timeout_us < (uint64_t)idle_period) {
ldout(async_msgr->cct, 1) << __func__ << " idle(" << idle_period << ") more than "
for (auto &&t : register_time_events)
center->delete_time_event(t);
register_time_events.clear();
- center->delete_time_event(last_tick_id);
+ if (last_tick_id) {
+ center->delete_time_event(last_tick_id);
+ last_tick_id = 0;
+ }
if (sd >= 0) {
center->delete_file_event(sd, EVENT_READABLE|EVENT_WRITABLE);
::shutdown(sd, SHUT_RDWR);
{
assert(in_thread());
ldout(cct, 10) << __func__ << " id=" << id << dendl;
- if (id >= time_event_next_id)
+ if (id >= time_event_next_id || id == 0)
return ;
auto it = event_map.find(id);