mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2025-03-22 06:17:04 +00:00
Nest: fixed corner cases on deleting from fib
This commit is contained in:
parent
eb04b725ef
commit
2ba6a02395
@ -426,13 +426,13 @@ fib_delete(struct fib *f, void *E)
|
|||||||
}
|
}
|
||||||
#undef UNDEF
|
#undef UNDEF
|
||||||
|
|
||||||
|
REDBLACK_DELETE(struct fib_node, rb, f->tree_root, e);
|
||||||
|
|
||||||
if (f->fib_slab)
|
if (f->fib_slab)
|
||||||
sl_free(f->fib_slab, E);
|
sl_free(f->fib_slab, E);
|
||||||
else
|
else
|
||||||
mb_free(E);
|
mb_free(E);
|
||||||
|
|
||||||
REDBLACK_DELETE(struct fib_node, rb, f->tree_root, e);
|
|
||||||
|
|
||||||
if (f->entries-- < f->entries_min)
|
if (f->entries-- < f->entries_min)
|
||||||
fib_rehash(f, -HASH_LO_STEP);
|
fib_rehash(f, -HASH_LO_STEP);
|
||||||
return;
|
return;
|
||||||
@ -503,14 +503,20 @@ fit_get(struct fib *f, struct fib_iterator *i)
|
|||||||
void
|
void
|
||||||
fit_put(struct fib_iterator *i, struct fib_node *n)
|
fit_put(struct fib_iterator *i, struct fib_node *n)
|
||||||
{
|
{
|
||||||
struct fib_iterator *j;
|
|
||||||
|
|
||||||
i->node = n;
|
i->node = n;
|
||||||
if (j = n->readers)
|
|
||||||
j->prev = i;
|
|
||||||
i->next = j;
|
|
||||||
n->readers = i;
|
|
||||||
i->prev = (struct fib_iterator *) n;
|
i->prev = (struct fib_iterator *) n;
|
||||||
|
|
||||||
|
if (!n)
|
||||||
|
{
|
||||||
|
i->next = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
i->next = n->readers;
|
||||||
|
n->readers = i;
|
||||||
|
|
||||||
|
if (i->next)
|
||||||
|
i->next->prev = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user