diff --git a/pceplib/pcep_timers.c b/pceplib/pcep_timers.c index e9d9d4b21d..d0a2349d05 100644 --- a/pceplib/pcep_timers.c +++ b/pceplib/pcep_timers.c @@ -457,10 +457,17 @@ void pceplib_external_timer_expire_handler(void *data) } pcep_timer *timer = (pcep_timer *)data; + pthread_mutex_lock(&timers_context_->timer_list_lock); ordered_list_node *timer_node = ordered_list_find2(timers_context_->timer_list, timer, timer_list_node_timer_ptr_compare); + + /* Remove timer from list */ + if (timer_node) + ordered_list_remove_node2(timers_context_->timer_list, + timer_node); + pthread_mutex_unlock(&timers_context_->timer_list_lock); /* Cannot continue if the timer does not exist */ @@ -474,9 +481,5 @@ void pceplib_external_timer_expire_handler(void *data) timers_context_->expire_handler(timer->data, timer->timer_id); - pthread_mutex_lock(&timers_context_->timer_list_lock); - ordered_list_remove_node2(timers_context_->timer_list, timer_node); - pthread_mutex_unlock(&timers_context_->timer_list_lock); - pceplib_free(PCEPLIB_INFRA, timer); }