From dec1d251dc3f622020346b7479cc7bc116f81150 Mon Sep 17 00:00:00 2001 From: Jean Guyomarc'h Date: Mon, 6 Jun 2016 23:40:29 +0200 Subject: [PATCH] eina: ensure resource destruction on failure In case of failure within eina_lock_new() (posix), a pthread_mutexattr_t would have been left in an initialized state, without any deinitialization being called. Consequences would have been implementation defined. --- src/lib/eina/eina_inline_lock_posix.x | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lib/eina/eina_inline_lock_posix.x b/src/lib/eina/eina_inline_lock_posix.x index 414a37a..58194e5 100644 --- a/src/lib/eina/eina_inline_lock_posix.x +++ b/src/lib/eina/eina_inline_lock_posix.x @@ -169,6 +169,7 @@ static inline Eina_Bool eina_lock_new(Eina_Lock *mutex) { pthread_mutexattr_t attr; + Eina_Bool ok = EINA_FALSE; #ifdef EINA_HAVE_DEBUG_THREADS if (!_eina_threads_activated) @@ -181,15 +182,16 @@ eina_lock_new(Eina_Lock *mutex) feature for sure with that change. */ #ifdef EINA_HAVE_DEBUG_THREADS if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK) != 0) - return EINA_FALSE; + goto fail_release; memset(mutex, 0, sizeof(Eina_Lock)); #endif if (pthread_mutex_init(&(mutex->mutex), &attr) != 0) - return EINA_FALSE; + goto fail_release; + ok = EINA_TRUE; +fail_release: pthread_mutexattr_destroy(&attr); - - return EINA_TRUE; + return ok; } static inline void -- 2.7.4