]> git.sesse.net Git - vlc/commitdiff
Fixed a potential deadlock.
authorLaurent Aimar <fenrir@videolan.org>
Wed, 23 Jul 2008 22:07:18 +0000 (00:07 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Wed, 23 Jul 2008 22:07:45 +0000 (00:07 +0200)
modules/misc/freetype.c

index 160d060c1848575893e9c416138bd355762fefe8..4e1906fd3722fb78da9b00bfea0b767251847662 100644 (file)
@@ -494,13 +494,22 @@ static void FontBuilderDetach( filter_t *p_filter, vlc_object_t *p_fontbuilder )
     vlc_mutex_t *lock = var_AcquireMutex( "fontbuilder" );
     if( p_fontbuilder )
     {
+        const bool b_alive = vlc_object_alive( p_fontbuilder );
+
         var_DelCallback( p_fontbuilder, "build-done", FontBuilderDone, p_filter );
 
         /* We wait for the thread on the first FontBuilderDetach */
-        if( vlc_object_alive( p_fontbuilder ) )
+        if( b_alive )
         {
             vlc_object_kill( p_fontbuilder );
+            vlc_mutex_unlock( lock );
+
+            /* We need to unlock otherwise we may not join (the thread waiting
+             * for the lock). It is safe to unlock as no one else will try a
+             * join and we have a reference on the object) */
             vlc_thread_join( p_fontbuilder );
+
+            vlc_mutex_lock( lock );
         }
         vlc_object_release( p_fontbuilder );
     }