]> git.droids-corp.org - dpdk.git/commitdiff
stack: fix reload head when pop fails
authorJulien Meunier <julien.meunier@nokia.com>
Tue, 21 Sep 2021 16:17:24 +0000 (18:17 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 27 Sep 2021 15:28:55 +0000 (17:28 +0200)
The previous commit 18effad9cfa7 ("stack: reload head when pop fails")
only changed C11 implementation, not generic implementation.

List head must be loaded right before continue (when failed to find the
new head). Without this, one thread might keep trying and failing to pop
items without ever loading the new correct head.

Fixes: 3340202f5954 ("stack: add lock-free implementation")
Cc: stable@dpdk.org
Signed-off-by: Julien Meunier <julien.meunier@nokia.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
lib/stack/rte_stack_lf_generic.h

index 4850a05ee7ab1ca239c7b30e0633a424bc9f7560..7fa29cedb282271bc15977d1d6e45e2055387ddf 100644 (file)
@@ -128,8 +128,10 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
                /* If NULL was encountered, the list was modified while
                 * traversing it. Retry.
                 */
-               if (i != num)
+               if (i != num) {
+                       old_head = list->head;
                        continue;
+               }
 
                new_head.top = tmp;
                new_head.cnt = old_head.cnt + 1;