aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-01-20 12:21:13 +0100
committerMartin Willi <martin@revosec.ch>2012-03-20 17:31:38 +0100
commita46b8e16adf710f827af6cc4aeb9733708bd58c6 (patch)
tree2aded1148d0b57d522f8372304f77a47c8735947
parentb226fd300d0f15023c80150e28dd1dd9aa9b741e (diff)
downloadstrongswan-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.c12
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,