mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-09 12:48:43 +00:00
OLocks in BGP must be freed early
This commit is contained in:
parent
cb51ff1fbb
commit
69c22818fb
@ -1158,10 +1158,13 @@ proto_event(void *ptr)
|
||||
}
|
||||
|
||||
if (proto_is_done(p))
|
||||
{
|
||||
rp_free(p->pool_fragile);
|
||||
if (p->loop != &main_birdloop)
|
||||
birdloop_stop_self(p->loop, proto_loop_stopped, p);
|
||||
else
|
||||
proto_cleanup(p);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1235,7 +1238,10 @@ proto_start(struct proto *p)
|
||||
p->iface_sub.target = proto_event_list(p);
|
||||
|
||||
PROTO_LOCKED_FROM_MAIN(p)
|
||||
{
|
||||
p->pool_fragile = rp_newf(p->pool, birdloop_domain(p->loop), "Protocol %s fragile objects", p->cf->name);
|
||||
proto_notify_state(p, (p->proto->start ? p->proto->start(p) : PS_UP));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -130,6 +130,8 @@ struct proto {
|
||||
struct proto_config *cf; /* Configuration data */
|
||||
struct proto_config *cf_new; /* Configuration we want to switch to after shutdown (NULL=delete) */
|
||||
pool *pool; /* Pool containing local objects */
|
||||
pool *pool_fragile; /* Pool containing fragile local objects which need to be freed
|
||||
before the protocol's birdloop actually stops, like olocks */
|
||||
event *event; /* Protocol event */
|
||||
timer *restart_timer; /* Timer to restart the protocol from limits */
|
||||
event *restart_event; /* Event to restart/shutdown the protocol from limits */
|
||||
|
@ -1742,7 +1742,7 @@ bgp_start(struct proto *P)
|
||||
* so that we are the only instance attempting to talk with that neighbor.
|
||||
*/
|
||||
struct object_lock *lock;
|
||||
lock = p->lock = olock_new(P->pool);
|
||||
lock = p->lock = olock_new(P->pool_fragile);
|
||||
lock->addr = p->remote_ip;
|
||||
lock->port = p->cf->remote_port;
|
||||
lock->iface = p->cf->iface;
|
||||
|
Loading…
Reference in New Issue
Block a user