diff options
author | Martin Willi <martin@revosec.ch> | 2012-01-20 12:21:13 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-03-20 17:31:38 +0100 |
commit | a46b8e16adf710f827af6cc4aeb9733708bd58c6 (patch) | |
tree | 2aded1148d0b57d522f8372304f77a47c8735947 | |
parent | b226fd300d0f15023c80150e28dd1dd9aa9b741e (diff) | |
download | strongswan-a46b8e16adf710f827af6cc4aeb9733708bd58c6.tar.bz2 strongswan-a46b8e16adf710f827af6cc4aeb9733708bd58c6.tar.xz |
Set thread specific SA on bus for each enumerated IKE_SA
-rw-r--r-- | src/libcharon/sa/ike_sa_manager.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/libcharon/sa/ike_sa_manager.c b/src/libcharon/sa/ike_sa_manager.c index 24e1388d9..b617a1332 100644 --- a/src/libcharon/sa/ike_sa_manager.c +++ b/src/libcharon/sa/ike_sa_manager.c @@ -1269,6 +1269,7 @@ static bool enumerator_filter_wait(private_ike_sa_manager_t *this, if (wait_for_entry(this, *in, *segment)) { *out = (*in)->ike_sa; + charon->bus->set_sa(charon->bus, *out); return TRUE; } return FALSE; @@ -1285,17 +1286,26 @@ static bool enumerator_filter_skip(private_ike_sa_manager_t *this, !(*in)->checked_out) { *out = (*in)->ike_sa; + charon->bus->set_sa(charon->bus, *out); return TRUE; } return FALSE; } +/** + * Reset threads SA after enumeration + */ +static void reset_sa(void *data) +{ + charon->bus->set_sa(charon->bus, NULL); +} + METHOD(ike_sa_manager_t, create_enumerator, enumerator_t*, private_ike_sa_manager_t* this, bool wait) { return enumerator_create_filter(create_table_enumerator(this), wait ? (void*)enumerator_filter_wait : (void*)enumerator_filter_skip, - this, NULL); + this, reset_sa); } METHOD(ike_sa_manager_t, checkin, void, |