Address potential thread issues:

Assign and then check node for NULL to address another thread
changing radix->head in the meantime.

Move 'node != NULL' check into while loop test to silence cppcheck
false positive.

Fix pointer != NULL style.
This commit is contained in:
Mark Andrews
2020-06-24 13:42:30 +10:00
parent 6d5fde62a3
commit 51f08d2095

View File

@@ -232,15 +232,16 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
*target = NULL;
if (radix->head == NULL) {
node = radix->head;
if (node == NULL) {
return (ISC_R_NOTFOUND);
}
node = radix->head;
addr = isc_prefix_touchar(prefix);
bitlen = prefix->bitlen;
while (node->bit < bitlen) {
while (node != NULL && node->bit < bitlen) {
if (node->prefix) {
stack[cnt++] = node;
}
@@ -251,13 +252,9 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
} else {
node = node->l;
}
if (node == NULL) {
break;
}
}
if (node && node->prefix) {
if (node != NULL && node->prefix) {
stack[cnt++] = node;
}