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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user