File tree 1 file changed +5
-10
lines changed
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,
230
230
if (atomic_load (prev ) != get_unmarked (curr ))
231
231
goto try_again ;
232
232
while (true) {
233
- if (!get_unmarked_node (curr ))
234
- return false;
235
233
next = (list_node_t * ) atomic_load (& get_unmarked_node (curr )-> next );
236
234
(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
+ */
237
239
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 ;
241
241
if (atomic_load (prev ) != get_unmarked (curr ))
242
242
goto try_again ;
243
243
if (get_unmarked_node (next ) == next ) {
@@ -259,11 +259,6 @@ static bool __list_find(list_t *list,
259
259
curr = next ;
260
260
(void ) list_hp_protect_release (list -> hp , HP_CURR , get_unmarked (next ));
261
261
}
262
- * par_curr = curr ;
263
- * par_prev = prev ;
264
- * par_next = next ;
265
-
266
- return false;
267
262
}
268
263
269
264
bool list_insert (list_t * list , list_key_t key )
You can’t perform that action at this time.
0 commit comments