vici: Replace child configs atomically

This also leaves unmodified configs as they are.
This commit is contained in:
Tobias Brunner
2016-03-08 10:21:58 +01:00
parent 622c2b2c33
commit 101abed566
+9 -12
View File
@@ -1847,23 +1847,20 @@ static void replace_children(private_vici_config_t *this,
{ {
enumerator_t *enumerator; enumerator_t *enumerator;
child_cfg_t *child; child_cfg_t *child;
bool added;
enumerator = to->create_child_cfg_enumerator(to); enumerator = to->replace_child_cfgs(to, from);
while (enumerator->enumerate(enumerator, &child)) while (enumerator->enumerate(enumerator, &child, &added))
{ {
to->remove_child_cfg(to, enumerator); if (added)
clear_start_action(this, to->get_name(to), child);
child->destroy(child);
}
enumerator->destroy(enumerator);
enumerator = from->create_child_cfg_enumerator(from);
while (enumerator->enumerate(enumerator, &child))
{ {
from->remove_child_cfg(from, enumerator);
to->add_child_cfg(to, child);
run_start_action(this, to, child); run_start_action(this, to, child);
} }
else
{
clear_start_action(this, to->get_name(to), child);
}
}
enumerator->destroy(enumerator); enumerator->destroy(enumerator);
} }