diff options
Diffstat (limited to 'proto/bgp')
-rw-r--r-- | proto/bgp/attrs.c | 6 | ||||
-rw-r--r-- | proto/bgp/bgp.c | 15 |
2 files changed, 11 insertions, 10 deletions
diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c index 8bff4c78..82971c01 100644 --- a/proto/bgp/attrs.c +++ b/proto/bgp/attrs.c @@ -1853,7 +1853,7 @@ bgp_init_pending_tx(struct bgp_channel *c) { ASSERT_DIE(!c->ptx); - pool *p = rp_new(c->pool, "BGP Pending TX"); + pool *p = rp_new(c->pool, proto_domain(c->c.proto), "BGP Pending TX"); c->ptx = ralloc(p, &bgp_pending_tx_class); c->ptx->pool = p; @@ -1867,7 +1867,7 @@ bgp_free_pending_tx(struct bgp_channel *c) ASSERT_DIE(c->ptx); ASSERT_DIE(c->ptx->pool); - rfree(c->ptx->pool); + rp_free(c->ptx->pool); c->ptx = NULL; } @@ -1981,7 +1981,7 @@ bgp_out_table_feed(void *data) static void bgp_out_table_export_start(struct rt_exporter *re, struct rt_export_request *req) { - req->hook = rt_alloc_export(re, sizeof(struct bgp_out_export_hook)); + req->hook = rt_alloc_export(re, req->pool, sizeof(struct bgp_out_export_hook)); req->hook->req = req; struct bgp_out_export_hook *hook = SKIP_BACK(struct bgp_out_export_hook, h, req->hook); diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index cda0eb8d..e60884ba 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -294,7 +294,7 @@ bgp_listen_create(void *_ UNUSED) { sk_log_error(sk, p->p.name); log(L_ERR "%s: Cannot open listening socket", p->p.name); - rfree(sk); + sk_close(sk); UNLOCK_DOMAIN(rtable, bgp_listen_domain); bgp_initiate_disable(p, BEM_NO_SOCKET); @@ -335,7 +335,7 @@ bgp_listen_create(void *_ UNUSED) WALK_LIST_DELSAFE(bs, nxt, bgp_sockets) if (EMPTY_LIST(bs->requests)) { - rfree(bs->sk); + sk_close(bs->sk); rem_node(&bs->n); mb_free(bs); } @@ -465,7 +465,7 @@ bgp_close_conn(struct bgp_conn *conn) rfree(conn->tx_ev); conn->tx_ev = NULL; - rfree(conn->sk); + sk_close(conn->sk); conn->sk = NULL; mb_free(conn->local_caps); @@ -922,7 +922,8 @@ bgp_graceful_restart_feed(struct bgp_channel *c) { c->stale_feed = (struct rt_export_request) { .name = "BGP-GR", - .list = &global_work_list, + .list = proto_event_list(c->c.proto), + .pool = c->c.proto->pool, .trace_routes = c->c.debug | c->c.proto->debug, .dump_req = bgp_graceful_restart_feed_dump_req, .log_state_change = bgp_graceful_restart_feed_log_state_change, @@ -1336,7 +1337,7 @@ bgp_incoming_connection(sock *sk, uint dummy UNUSED) { log(L_WARN "BGP: Unexpected connect from unknown address %I%J (port %d)", sk->daddr, ipa_is_link_local(sk->daddr) ? sk->iface : NULL, sk->dport); - rfree(sk); + sk_close(sk); return 0; } @@ -1370,7 +1371,7 @@ bgp_incoming_connection(sock *sk, uint dummy UNUSED) if (!acc) { - rfree(sk); + sk_close(sk); goto leave; } @@ -1410,7 +1411,7 @@ bgp_incoming_connection(sock *sk, uint dummy UNUSED) err: sk_log_error(sk, p->p.name); log(L_ERR "%s: Incoming connection aborted", p->p.name); - rfree(sk); + sk_close(sk); leave: birdloop_leave(p->p.loop); |