From: Hiroyuki Mikita Date: Sun, 17 Jul 2016 14:35:39 +0000 (+0900) Subject: timer: fix pending-list manipulation X-Git-Tag: spdx-start~6074 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=d43baa8503741a0df3feb890265084c22e3fd3ba;p=dpdk.git timer: fix pending-list manipulation This commit fixes incorrect pending-list manipulation when getting list of expired timers in rte_timer_manage(). When timer_get_prev_entries() sets pending_head on prev, the pending-list is broken. The next of pending_head always becomes NULL. In this depth level, it is not need to manipulate the list. Fixes: 9b15ba895b9f ("timer: use a skip list") Signed-off-by: Hiroyuki Mikita Acked-by: Robert Sanford --- diff --git a/lib/librte_timer/rte_timer.c b/lib/librte_timer/rte_timer.c index 3dcdab58a6..7457d32e27 100644 --- a/lib/librte_timer/rte_timer.c +++ b/lib/librte_timer/rte_timer.c @@ -543,6 +543,8 @@ void rte_timer_manage(void) /* break the existing list at current time point */ timer_get_prev_entries(cur_time, lcore_id, prev); for (i = priv_timer[lcore_id].curr_skiplist_depth -1; i >= 0; i--) { + if (prev[i] == &priv_timer[lcore_id].pending_head) + continue; priv_timer[lcore_id].pending_head.sl_next[i] = prev[i]->sl_next[i]; if (prev[i]->sl_next[i] == NULL)