Commit 29f2d89e authored by Laurent Aimar's avatar Laurent Aimar

Fixed a potential deadlock.

parent acc16631
...@@ -494,13 +494,22 @@ static void FontBuilderDetach( filter_t *p_filter, vlc_object_t *p_fontbuilder ) ...@@ -494,13 +494,22 @@ static void FontBuilderDetach( filter_t *p_filter, vlc_object_t *p_fontbuilder )
vlc_mutex_t *lock = var_AcquireMutex( "fontbuilder" ); vlc_mutex_t *lock = var_AcquireMutex( "fontbuilder" );
if( p_fontbuilder ) if( p_fontbuilder )
{ {
const bool b_alive = vlc_object_alive( p_fontbuilder );
var_DelCallback( p_fontbuilder, "build-done", FontBuilderDone, p_filter ); var_DelCallback( p_fontbuilder, "build-done", FontBuilderDone, p_filter );
/* We wait for the thread on the first FontBuilderDetach */ /* We wait for the thread on the first FontBuilderDetach */
if( vlc_object_alive( p_fontbuilder ) ) if( b_alive )
{ {
vlc_object_kill( p_fontbuilder ); 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_thread_join( p_fontbuilder );
vlc_mutex_lock( lock );
} }
vlc_object_release( p_fontbuilder ); vlc_object_release( p_fontbuilder );
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment