Fixed a buglet in asynchronous feeding and increased maximum number

of routes allowed per feeding phase.
This commit is contained in:
Martin Mares 2000-05-19 10:59:47 +00:00
parent ac5d801217
commit 76dfda9e74

View file

@ -659,7 +659,7 @@ rt_feed_baby(struct proto *p)
{ {
struct announce_hook *h; struct announce_hook *h;
struct fib_iterator *fit; struct fib_iterator *fit;
int max_feed = 2; /* FIXME */ int max_feed = 256;
if (!p->feed_ahook) /* Need to initialize first */ if (!p->feed_ahook) /* Need to initialize first */
{ {
@ -678,6 +678,11 @@ again:
{ {
net *n = (net *) fn; net *n = (net *) fn;
rte *e; rte *e;
if (max_feed <= 0)
{
FIB_ITERATE_PUT(fit, fn);
return 0;
}
for(e=n->routes; e; e=e->next) for(e=n->routes; e; e=e->next)
{ {
struct proto *q = e->attrs->proto; struct proto *q = e->attrs->proto;
@ -689,11 +694,7 @@ again:
tmpa = q->make_tmp_attrs ? q->make_tmp_attrs(e, rte_update_pool) : NULL; tmpa = q->make_tmp_attrs ? q->make_tmp_attrs(e, rte_update_pool) : NULL;
do_rte_announce(h, n, e, NULL, tmpa, ipa_classify(n->n.prefix)); do_rte_announce(h, n, e, NULL, tmpa, ipa_classify(n->n.prefix));
rte_update_unlock(); rte_update_unlock();
if (!--max_feed) max_feed--;
{
FIB_ITERATE_PUT(fit, fn);
return 0;
}
} }
} }
FIB_ITERATE_END(fn); FIB_ITERATE_END(fn);