File tree Expand file tree Collapse file tree 1 file changed +5
-10
lines changed
Expand file tree Collapse file tree 1 file changed +5
-10
lines changed Original file line number Diff line number Diff line change @@ -230,14 +230,14 @@ static bool __list_find(list_t *list,
230230 if (atomic_load (prev ) != get_unmarked (curr ))
231231 goto try_again ;
232232 while (true) {
233- if (!get_unmarked_node (curr ))
234- return false;
235233 next = (list_node_t * ) atomic_load (& get_unmarked_node (curr )-> next );
236234 (void ) list_hp_protect_ptr (list -> hp , HP_NEXT , get_unmarked (next ));
235+ /* On a CAS failure, the search function, "__list_find," will simply
236+ * have to go backwards in the list until an unmarked element is found
237+ * from which the search in increasing key order can be started.
238+ */
237239 if (atomic_load (& get_unmarked_node (curr )-> next ) != (uintptr_t ) next )
238- break ;
239- if (get_unmarked (next ) == atomic_load ((atomic_uintptr_t * ) & list -> tail ))
240- break ;
240+ goto try_again ;
241241 if (atomic_load (prev ) != get_unmarked (curr ))
242242 goto try_again ;
243243 if (get_unmarked_node (next ) == next ) {
@@ -259,11 +259,6 @@ static bool __list_find(list_t *list,
259259 curr = next ;
260260 (void ) list_hp_protect_release (list -> hp , HP_CURR , get_unmarked (next ));
261261 }
262- * par_curr = curr ;
263- * par_prev = prev ;
264- * par_next = next ;
265-
266- return false;
267262}
268263
269264bool list_insert (list_t * list , list_key_t key )
You can’t perform that action at this time.
0 commit comments