1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
From 616ff9a2369fd250a2b9e8d2a00f37e2e8d3a2f3 Mon Sep 17 00:00:00 2001
From: Tobias Brunner <tobias@strongswan.org>
Date: Tue, 14 Jul 2015 16:50:32 +0200
Subject: [PATCH] shunt-manager: Remove stored entries if installation fails
---
src/libcharon/sa/shunt_manager.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/libcharon/sa/shunt_manager.c b/src/libcharon/sa/shunt_manager.c
index 434bace..2e42e7e 100644
--- a/src/libcharon/sa/shunt_manager.c
+++ b/src/libcharon/sa/shunt_manager.c
@@ -122,7 +122,7 @@ METHOD(shunt_manager_t, install, bool,
{
enumerator_t *enumerator;
child_cfg_t *child_cfg;
- bool found = FALSE;
+ bool found = FALSE, success;
/* check if not already installed */
this->lock->write_lock(this->lock);
@@ -146,7 +146,16 @@ METHOD(shunt_manager_t, install, bool,
this->shunts->insert_last(this->shunts, child->get_ref(child));
this->lock->unlock(this->lock);
- return install_shunt_policy(child);
+ success = install_shunt_policy(child);
+
+ if (!success)
+ {
+ this->lock->write_lock(this->lock);
+ this->shunts->remove(this->shunts, child, NULL);
+ this->lock->unlock(this->lock);
+ child->destroy(child);
+ }
+ return success;
}
/**
--
2.4.6
|