diff options
-rw-r--r-- | nest/proto.c | 7 | ||||
-rw-r--r-- | nest/rt-table.c | 3 |
2 files changed, 10 insertions, 0 deletions
diff --git a/nest/proto.c b/nest/proto.c index 48558865..28b4426d 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -617,6 +617,12 @@ channel_export_stopped(struct rt_export_request *req) { c->refeeding = 1; c->refeed_pending = 0; + + channel_reset_limit(c, &c->out_limit, PLD_OUT); + + bmap_reset(&c->export_map, 1024); + bmap_reset(&c->export_reject_map, 1024); + rt_request_export(c->table, req); return; } @@ -643,6 +649,7 @@ channel_feed_end(struct channel *c) (l->count <= l->max)) { log(L_INFO "Protocol %s resets route export limit (%u)", c->proto->name, l->max); + channel_reset_limit(c, &c->out_limit, PLD_OUT); c->refeed_pending = 1; rt_stop_export(req, channel_export_stopped); diff --git a/nest/rt-table.c b/nest/rt-table.c index 8980f147..8e4a9e00 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -899,6 +899,9 @@ rt_notify_basic(struct channel *c, const net_addr *net, rte *new, rte *old) if (old && !bmap_test(&c->export_map, old->id)) old = NULL; + if (old && (old->sender == c->in_req.hook)) + bug("bad-behaved pipe"); + if (!new && !old) return; |