From e7b0f4918727e0dd73c35e745bf3507acccb76eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Rymanowski?= Date: Fri, 22 Feb 2019 13:49:18 +0100 Subject: [PATCH] nimble/ll: Fix removing elements from the scheduler This patch makes sure to start scheduler timer only for valid entry. Also now function will return imidiatelly if scheduler list is empty. --- nimble/controller/src/ble_ll_sched.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/nimble/controller/src/ble_ll_sched.c b/nimble/controller/src/ble_ll_sched.c index 0fce0289f..70b8f2668 100644 --- a/nimble/controller/src/ble_ll_sched.c +++ b/nimble/controller/src/ble_ll_sched.c @@ -1112,6 +1112,11 @@ ble_ll_sched_rmv_elem_type(uint8_t type, sched_remove_cb_func remove_cb) OS_ENTER_CRITICAL(sr); first = TAILQ_FIRST(&g_ble_ll_sched_q); + if (!first) { + OS_EXIT_CRITICAL(sr); + return; + } + TAILQ_FOREACH(entry, &g_ble_ll_sched_q, link) { if (entry->sched_type == type) { if (first == entry) { @@ -1127,7 +1132,9 @@ ble_ll_sched_rmv_elem_type(uint8_t type, sched_remove_cb_func remove_cb) if (!first) { first = TAILQ_FIRST(&g_ble_ll_sched_q); - os_cputime_timer_start(&g_ble_ll_sched_timer, first->start_time); + if (first) { + os_cputime_timer_start(&g_ble_ll_sched_timer, first->start_time); + } } OS_EXIT_CRITICAL(sr);