gthread: Fix use of a local variable after it went out of scope
authorPhilip Withnall <philip.withnall@collabora.co.uk>
Fri, 16 May 2014 20:47:24 +0000 (21:47 +0100)
committerPhilip Withnall <philip.withnall@collabora.co.uk>
Tue, 20 May 2014 10:01:38 +0000 (11:01 +0100)
This could theoretically cause problems, although in practice we would
have seen them by now (the bug was introduced in 2012).

Coverity issue: #1159486

https://bugzilla.gnome.org/show_bug.cgi?id=730277

glib/gthread-posix.c

index c98c2d8..2f54070 100644 (file)
@@ -83,18 +83,18 @@ g_mutex_impl_new (void)
   pthread_mutexattr_t *pattr = NULL;
   pthread_mutex_t *mutex;
   gint status;
+#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+  pthread_mutexattr_t attr;
+#endif
 
   mutex = malloc (sizeof (pthread_mutex_t));
   if G_UNLIKELY (mutex == NULL)
     g_thread_abort (errno, "malloc");
 
 #ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
-  {
-    pthread_mutexattr_t attr;
-    pthread_mutexattr_init (&attr);
-    pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
-    pattr = &attr;
-  }
+  pthread_mutexattr_init (&attr);
+  pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
+  pattr = &attr;
 #endif
 
   if G_UNLIKELY ((status = pthread_mutex_init (mutex, pattr)) != 0)