0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-09-18 19:35:20 +00:00

Conf: Fix too early free of old configuration

The change 371eb49043 introduced early free
of old_config. Unfortunately, it did not properly check whether it is not
still in use (blocked by obstacle during reconfiguration). Fix that.

It also means that we still could have a short peak when three configs
are in use (when a new reconfig is requeste while the previous one is
still active).
This commit is contained in:
Ondrej Zajicek 2023-02-19 03:59:10 +01:00
parent ee91965894
commit eefb296799

View File

@ -197,8 +197,12 @@ cleanup:
void void
config_free(struct config *c) config_free(struct config *c)
{ {
if (c) if (!c)
rfree(c->pool); return;
ASSERT(!c->obstacle_count);
rfree(c->pool);
} }
/** /**
@ -207,10 +211,14 @@ config_free(struct config *c)
* This function frees the old configuration (%old_config) that is saved for the * This function frees the old configuration (%old_config) that is saved for the
* purpose of undo. It is useful before parsing a new config when reconfig is * purpose of undo. It is useful before parsing a new config when reconfig is
* requested, to avoid keeping three (perhaps memory-heavy) configs together. * requested, to avoid keeping three (perhaps memory-heavy) configs together.
* Configuration is not freed when it is still active during reconfiguration.
*/ */
void void
config_free_old(void) config_free_old(void)
{ {
if (!old_config || old_config->obstacle_count)
return;
tm_stop(config_timer); tm_stop(config_timer);
undo_available = 0; undo_available = 0;