libvlc: Wait for input end.
authorPierre d'Herbemont <pdherbemont@free.fr>
Sat, 29 Mar 2008 20:20:55 +0000 (21:20 +0100)
committerPierre d'Herbemont <pdherbemont@free.fr>
Sat, 29 Mar 2008 20:32:26 +0000 (21:32 +0100)
src/libvlc-common.c

index 33a80c1..e7755d5 100644 (file)
@@ -921,6 +921,7 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
 {
     intf_thread_t      * p_intf = NULL;
     vout_thread_t      * p_vout = NULL;
+    input_thread_t     * p_input = NULL;
     aout_instance_t    * p_aout = NULL;
     announce_handler_t * p_announce = NULL;
 
@@ -939,6 +940,15 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
     msg_Dbg( p_libvlc, "removing playlist" );
     playlist_ThreadDestroy( p_libvlc->p_playlist );
 
+    /* Free input */
+    msg_Dbg( p_libvlc, "waiting all input end" );
+    while( (p_input = vlc_object_find( p_libvlc, VLC_OBJECT_INPUT, FIND_CHILD )) )
+    {
+        vlc_object_kill( p_input );
+        vlc_thread_join( p_input );
+        vlc_object_release( p_input );
+    }
+
     /* Free video outputs */
     msg_Dbg( p_libvlc, "removing all video outputs" );
     while( (p_vout = vlc_object_find( p_libvlc, VLC_OBJECT_VOUT, FIND_CHILD )) )