fixed a double-unlock bug, showed up when using rwlocks in backend manager

This commit is contained in:
Martin Willi
2008-11-28 08:22:55 +00:00
parent ced41695dc
commit 9a1263c3c1
+2 -20
View File
@@ -76,24 +76,6 @@ typedef struct {
identification_t *other; identification_t *other;
} peer_data_t; } peer_data_t;
/**
* destroy IKE enumerator data and unlock list
*/
static void ike_enum_destroy(ike_data_t *data)
{
data->this->lock->unlock(data->this->lock);
free(data);
}
/**
* destroy PEER enumerator data and unlock list
*/
static void peer_enum_destroy(peer_data_t *data)
{
data->this->lock->unlock(data->this->lock);
free(data);
}
/** /**
* inner enumerator constructor for IKE cfgs * inner enumerator constructor for IKE cfgs
*/ */
@@ -180,7 +162,7 @@ static ike_cfg_t *get_ike_cfg(private_backend_manager_t *this,
this->lock->read_lock(this->lock); this->lock->read_lock(this->lock);
enumerator = enumerator_create_nested( enumerator = enumerator_create_nested(
this->backends->create_enumerator(this->backends), this->backends->create_enumerator(this->backends),
(void*)ike_enum_create, data, (void*)ike_enum_destroy); (void*)ike_enum_create, data, (void*)free);
while (enumerator->enumerate(enumerator, (void**)&current)) while (enumerator->enumerate(enumerator, (void**)&current))
{ {
match = get_match(current, me, other); match = get_match(current, me, other);
@@ -243,7 +225,7 @@ static peer_cfg_t *get_peer_cfg(private_backend_manager_t *this, host_t *me,
this->lock->read_lock(this->lock); this->lock->read_lock(this->lock);
enumerator = enumerator_create_nested( enumerator = enumerator_create_nested(
this->backends->create_enumerator(this->backends), this->backends->create_enumerator(this->backends),
(void*)peer_enum_create, data, (void*)peer_enum_destroy); (void*)peer_enum_create, data, (void*)free);
while (enumerator->enumerate(enumerator, &current)) while (enumerator->enumerate(enumerator, &current))
{ {
identification_t *my_cand, *other_cand; identification_t *my_cand, *other_cand;