diff --git a/src/critnib/critnib.c b/src/critnib/critnib.c index 1adb2dc7e..5c3a65dfd 100644 --- a/src/critnib/critnib.c +++ b/src/critnib/critnib.c @@ -525,7 +525,9 @@ find_predecessor(struct critnib_node *__restrict n) { while (1) { int nib; for (nib = NIB; nib >= 0; nib--) { - if (n->child[nib]) { + struct critnib_node *m; + utils_atomic_load_acquire_ptr((void **)&n->child[nib], (void **)&m); + if (m) { break; } } @@ -534,7 +536,7 @@ find_predecessor(struct critnib_node *__restrict n) { return NULL; } - n = n->child[nib]; + utils_atomic_load_acquire_ptr((void **)&n->child[nib], (void **)&n); if (is_leaf(n)) { return to_leaf(n); }