diff options
author | Tobias Brunner <tobias@strongswan.org> | 2015-10-16 12:40:10 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2016-03-08 10:21:58 +0100 |
commit | 101abed566099b5b9ac53a86a88e03af27bbf1d5 (patch) | |
tree | 3a895a6d400168349c12863b5d6832af6d261073 /src | |
parent | 622c2b2c3386dd8fad321fc3bbd4d019b99fbb71 (diff) | |
download | strongswan-101abed566099b5b9ac53a86a88e03af27bbf1d5.tar.bz2 strongswan-101abed566099b5b9ac53a86a88e03af27bbf1d5.tar.xz |
vici: Replace child configs atomically
This also leaves unmodified configs as they are.
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/plugins/vici/vici_config.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c index 6cf127b74..27268a512 100644 --- a/src/libcharon/plugins/vici/vici_config.c +++ b/src/libcharon/plugins/vici/vici_config.c @@ -1847,22 +1847,19 @@ static void replace_children(private_vici_config_t *this, { enumerator_t *enumerator; child_cfg_t *child; + bool added; - enumerator = to->create_child_cfg_enumerator(to); - while (enumerator->enumerate(enumerator, &child)) + enumerator = to->replace_child_cfgs(to, from); + while (enumerator->enumerate(enumerator, &child, &added)) { - to->remove_child_cfg(to, enumerator); - 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); + if (added) + { + run_start_action(this, to, child); + } + else + { + clear_start_action(this, to->get_name(to), child); + } } enumerator->destroy(enumerator); } |