Skip to content

Commit 53a318f

Browse files
authored
Merge pull request #1143 from ldorau/Use_eight_level_of_critnibs_in_the_tracker
Use eight level of critnibs in the tracker
2 parents b1fc46a + c1b9f1b commit 53a318f

9 files changed

+1099
-91
lines changed

include/umf/base.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ typedef enum umf_result_t {
4747
6, ///< Failure in user provider code (i.e in user provided callback)
4848
UMF_RESULT_ERROR_DEPENDENCY_UNAVAILABLE =
4949
7, ///< External required dependency is unavailable or missing
50-
UMF_RESULT_ERROR_UNKNOWN = 0x7ffffffe ///< Unknown or internal error
50+
UMF_RESULT_ERROR_OUT_OF_RESOURCES = 8, ///< Out of internal resources
51+
UMF_RESULT_ERROR_UNKNOWN = 0x7ffffffe ///< Unknown error
5152
} umf_result_t;
5253

5354
#ifdef __cplusplus

src/critnib/critnib.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,9 @@ static struct critnib_leaf *find_successor(struct critnib_node *__restrict n) {
645645
while (1) {
646646
unsigned nib;
647647
for (nib = 0; nib <= NIB; nib++) {
648-
if (n->child[nib]) {
648+
struct critnib_node *m;
649+
utils_atomic_load_acquire_ptr((void **)&n->child[nib], (void **)&m);
650+
if (m) {
649651
break;
650652
}
651653
}
@@ -654,7 +656,7 @@ static struct critnib_leaf *find_successor(struct critnib_node *__restrict n) {
654656
return NULL;
655657
}
656658

657-
n = n->child[nib];
659+
utils_atomic_load_acquire_ptr((void **)&n->child[nib], (void **)&n);
658660

659661
if (!n) {
660662
return NULL;

0 commit comments

Comments
 (0)