From 380106ab0d90ed157cbc75b27cbd70c23a4f60d3 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Tue, 6 Jul 2010 15:44:37 +0200 Subject: [PATCH] Avoid relocking while enumerator is alive --- .../credentials/keys/key_encoding.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/libstrongswan/credentials/keys/key_encoding.c b/src/libstrongswan/credentials/keys/key_encoding.c index 89b25226c..d76ad0b23 100644 --- a/src/libstrongswan/credentials/keys/key_encoding.c +++ b/src/libstrongswan/credentials/keys/key_encoding.c @@ -168,20 +168,21 @@ static bool encode(private_key_encoding_t *this, key_encoding_type_t type, va_end(copy); if (success) { - if (cache) - { - chunk = malloc_thing(chunk_t); - *chunk = *encoding; - this->lock->unlock(this->lock); - this->lock->write_lock(this->lock); - this->cache[type]->put(this->cache[type], cache, chunk); - } break; } } enumerator->destroy(enumerator); - va_end(args); this->lock->unlock(this->lock); + va_end(args); + + if (success && cache) + { + chunk = malloc_thing(chunk_t); + *chunk = *encoding; + this->lock->write_lock(this->lock); + this->cache[type]->put(this->cache[type], cache, chunk); + this->lock->unlock(this->lock); + } return success; }