diff options
author | Martin Willi <martin@revosec.ch> | 2012-03-13 10:55:58 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-03-13 10:56:22 +0100 |
commit | bc403eb1e5e26d93aad6a29ba001cd439ce58784 (patch) | |
tree | 39fcf9d24dbd31b38ba7831d67592d177ecd0565 /src | |
parent | cd6b5bf8e96b77be33468ef74ba440c7b3759b7f (diff) | |
download | strongswan-bc403eb1e5e26d93aad6a29ba001cd439ce58784.tar.bz2 strongswan-bc403eb1e5e26d93aad6a29ba001cd439ce58784.tar.xz |
Fixed crash and locking issues while unrouting connections via stroke
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/plugins/stroke/stroke_control.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/libcharon/plugins/stroke/stroke_control.c b/src/libcharon/plugins/stroke/stroke_control.c index f0d8f3b74..729e9d757 100644 --- a/src/libcharon/plugins/stroke/stroke_control.c +++ b/src/libcharon/plugins/stroke/stroke_control.c @@ -633,8 +633,7 @@ METHOD(stroke_control_t, unroute, void, { child_sa_t *child_sa; enumerator_t *enumerator; - u_int32_t id; - bool found = FALSE; + u_int32_t id = 0; if (charon->shunts->uninstall(charon->shunts, msg->unroute.name)) { @@ -648,15 +647,17 @@ METHOD(stroke_control_t, unroute, void, if (streq(msg->unroute.name, child_sa->get_name(child_sa))) { id = child_sa->get_reqid(child_sa); - enumerator->destroy(enumerator); - charon->traps->uninstall(charon->traps, id); - fprintf(out, "configuration '%s' unrouted\n", msg->unroute.name); - found = TRUE; + break; } } enumerator->destroy(enumerator); - if (!found) + if (id) + { + charon->traps->uninstall(charon->traps, id); + fprintf(out, "configuration '%s' unrouted\n", msg->unroute.name); + } + else { fprintf(out, "configuration '%s' not found\n", msg->unroute.name); } |