diff --git a/src/libpmemobj/critnib.c b/src/libpmemobj/critnib.c index 07376e028dd3e02199d6ea07d22982adbf0204dc..5ef83badc8442aeedb84b04b679fcc51ffa83b48 100644 --- a/src/libpmemobj/critnib.c +++ b/src/libpmemobj/critnib.c @@ -368,6 +368,8 @@ critnib_insert(struct critnib *c, uint64_t key, void *value) return ENOMEM; } + VALGRIND_HG_DRD_DISABLE_CHECKING(k, sizeof(struct critnib_leaf)); + k->key = key; k->value = value; @@ -424,6 +426,7 @@ critnib_insert(struct critnib *c, uint64_t key, void *value) return ENOMEM; } + VALGRIND_HG_DRD_DISABLE_CHECKING(m, sizeof(struct critnib_node)); for (int i = 0; i < SLNODES; i++) m->child[i] = NULL; @@ -545,10 +548,8 @@ critnib_get(struct critnib *c, uint64_t key) * each node's critical bit^H^H^Hnibble. This means we risk * going wrong way if our path is missing, but that's ok... */ - while (n && !is_leaf(n)) { - VALGRIND_HG_DRD_DISABLE_CHECKING(n, sizeof(*n)); + while (n && !is_leaf(n)) load(&n->child[slice_index(key, n->shift)], &n); - } /* ... as we check it at the end. */ struct critnib_leaf *k = to_leaf(n);