Commit a878e8d4 authored by Mark Andrews's avatar Mark Andrews
Browse files

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.

(cherry picked from commit 51f08d20)
parent ba420d50
Pipeline #45228 failed with stages
in 43 minutes and 1 second
...@@ -250,35 +250,38 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target, ...@@ -250,35 +250,38 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
*target = NULL; *target = NULL;
if (radix->head == NULL) { node = radix->head;
if (node == NULL) {
return (ISC_R_NOTFOUND); return (ISC_R_NOTFOUND);
} }
node = radix->head;
addr = isc_prefix_touchar(prefix); addr = isc_prefix_touchar(prefix);
bitlen = prefix->bitlen; bitlen = prefix->bitlen;
while (node->bit < bitlen) { while (node != NULL && node->bit < bitlen) {
if (node->prefix) if (node->prefix) {
stack[cnt++] = node; stack[cnt++] = node;
}
if (BIT_TEST(addr[node->bit >> 3], 0x80 >> (node->bit & 0x07))) if (BIT_TEST(addr[node->bit >> 3], 0x80 >> (node->bit & 0x07)))
{
node = node->r; node = node->r;
else } else {
node = node->l; node = node->l;
}
if (node == NULL)
break;
} }
if (node && node->prefix) if (node != NULL && node->prefix) {
stack[cnt++] = node; stack[cnt++] = node;
}
while (cnt-- > 0) { while (cnt-- > 0) {
node = stack[cnt]; node = stack[cnt];
if (prefix->bitlen < node->bit) if (prefix->bitlen < node->bit) {
continue; continue;
}
if (_comp_with_mask(isc_prefix_tochar(node->prefix), if (_comp_with_mask(isc_prefix_tochar(node->prefix),
isc_prefix_tochar(prefix), isc_prefix_tochar(prefix),
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment