jayji pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=dec1d251dc3f622020346b7479cc7bc116f81150

commit dec1d251dc3f622020346b7479cc7bc116f81150
Author: Jean Guyomarc'h <[email protected]>
Date:   Mon Jun 6 23:40:29 2016 +0200

    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

-- 


Reply via email to