summaryrefslogtreecommitdiff
path: root/pceplib/pcep_timers.c
diff options
context:
space:
mode:
authorMark Stapp <mjs@voltanet.io>2021-03-25 09:56:11 -0400
committerMark Stapp <mjs@voltanet.io>2021-03-25 09:56:11 -0400
commitcdcb405119fd924c0c71bfc3b7b0295a9a09c327 (patch)
tree9a8e14e6dce34bf50e94a01347e9d57346740cc9 /pceplib/pcep_timers.c
parent7c94e3d606f6bc75c93361fb59cdeb59aadc866c (diff)
libs: fix race in pcep lib
Fix a race in the libpcep timer code; reported by coverity. Signed-off-by: Mark Stapp <mjs@voltanet.io>
Diffstat (limited to 'pceplib/pcep_timers.c')
-rw-r--r--pceplib/pcep_timers.c11
1 files changed, 7 insertions, 4 deletions
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);
}