Set thread specific SA on bus for each enumerated IKE_SA
This commit is contained in:
@@ -1269,6 +1269,7 @@ static bool enumerator_filter_wait(private_ike_sa_manager_t *this,
|
|||||||
if (wait_for_entry(this, *in, *segment))
|
if (wait_for_entry(this, *in, *segment))
|
||||||
{
|
{
|
||||||
*out = (*in)->ike_sa;
|
*out = (*in)->ike_sa;
|
||||||
|
charon->bus->set_sa(charon->bus, *out);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1285,17 +1286,26 @@ static bool enumerator_filter_skip(private_ike_sa_manager_t *this,
|
|||||||
!(*in)->checked_out)
|
!(*in)->checked_out)
|
||||||
{
|
{
|
||||||
*out = (*in)->ike_sa;
|
*out = (*in)->ike_sa;
|
||||||
|
charon->bus->set_sa(charon->bus, *out);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
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*,
|
METHOD(ike_sa_manager_t, create_enumerator, enumerator_t*,
|
||||||
private_ike_sa_manager_t* this, bool wait)
|
private_ike_sa_manager_t* this, bool wait)
|
||||||
{
|
{
|
||||||
return enumerator_create_filter(create_table_enumerator(this),
|
return enumerator_create_filter(create_table_enumerator(this),
|
||||||
wait ? (void*)enumerator_filter_wait : (void*)enumerator_filter_skip,
|
wait ? (void*)enumerator_filter_wait : (void*)enumerator_filter_skip,
|
||||||
this, NULL);
|
this, reset_sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(ike_sa_manager_t, checkin, void,
|
METHOD(ike_sa_manager_t, checkin, void,
|
||||||
|
|||||||
Reference in New Issue
Block a user