Commit 7f41e3ed authored by Laurent Aimar's avatar Laurent Aimar Committed by Derk-Jan Hartman

Fixed spu destruction order.

It should fix a potential segfault when the vout is closed.
parent 91af1609
...@@ -449,9 +449,7 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt ) ...@@ -449,9 +449,7 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
if( p_vout->p_module == NULL ) if( p_vout->p_module == NULL )
{ {
msg_Err( p_vout, "no suitable vout module" ); msg_Err( p_vout, "no suitable vout module" );
// FIXME it's ugly but that's exactly the function that need to be called. vlc_object_set_destructor( p_vout, vout_Destructor );
EndThread( p_vout );
vlc_object_detach( p_vout );
vlc_object_release( p_vout ); vlc_object_release( p_vout );
return NULL; return NULL;
} }
...@@ -504,6 +502,8 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt ) ...@@ -504,6 +502,8 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
VLC_THREAD_PRIORITY_OUTPUT, true ) ) VLC_THREAD_PRIORITY_OUTPUT, true ) )
{ {
module_Unneed( p_vout, p_vout->p_module ); module_Unneed( p_vout, p_vout->p_module );
p_vout->p_module = NULL;
vlc_object_set_destructor( p_vout, vout_Destructor );
vlc_object_release( p_vout ); vlc_object_release( p_vout );
return NULL; return NULL;
} }
...@@ -546,6 +546,9 @@ static void vout_Destructor( vlc_object_t * p_this ) ...@@ -546,6 +546,9 @@ static void vout_Destructor( vlc_object_t * p_this )
/* Make sure the vout was stopped first */ /* Make sure the vout was stopped first */
assert( !p_vout->p_module ); assert( !p_vout->p_module );
/* */
spu_Destroy( p_vout->p_spu );
/* Destroy the locks */ /* Destroy the locks */
vlc_mutex_destroy( &p_vout->picture_lock ); vlc_mutex_destroy( &p_vout->picture_lock );
vlc_mutex_destroy( &p_vout->change_lock ); vlc_mutex_destroy( &p_vout->change_lock );
...@@ -1248,7 +1251,6 @@ static void EndThread( vout_thread_t *p_vout ) ...@@ -1248,7 +1251,6 @@ static void EndThread( vout_thread_t *p_vout )
/* Destroy subpicture unit */ /* Destroy subpicture unit */
spu_Attach( p_vout->p_spu, VLC_OBJECT(p_vout), false ); spu_Attach( p_vout->p_spu, VLC_OBJECT(p_vout), false );
spu_Destroy( p_vout->p_spu );
/* Destroy the video filters2 */ /* Destroy the video filters2 */
filter_chain_Delete( p_vout->p_vf2_chain ); filter_chain_Delete( p_vout->p_vf2_chain );
......
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