credential-factory: Avoid deadlock during unit tests
If a unit test times out while generating a private key (e.g. because of a lack of entropy), this avoids a deadlock by still releasing the read lock that'd prevent acquiring the write lock when plugins are unloaded. Closes strongswan/strongswan#2850
This commit is contained in:
@@ -140,6 +140,8 @@ METHOD(credential_factory_t, create, void*,
|
||||
this->recursive->set(this->recursive, (void*)level + 1);
|
||||
|
||||
this->lock->read_lock(this->lock);
|
||||
/* push this in case of a timeout during unit tests */
|
||||
thread_cleanup_push((thread_cleanup_t)this->lock->unlock, this->lock);
|
||||
enumerator = this->constructors->create_enumerator(this->constructors);
|
||||
while (enumerator->enumerate(enumerator, &entry))
|
||||
{
|
||||
@@ -159,7 +161,7 @@ METHOD(credential_factory_t, create, void*,
|
||||
}
|
||||
}
|
||||
enumerator->destroy(enumerator);
|
||||
this->lock->unlock(this->lock);
|
||||
thread_cleanup_pop(TRUE);
|
||||
|
||||
if (!construct && !level)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user