]> git.sesse.net Git - vlc/commitdiff
vlm : call var_DelCallback after input thread is joined.
authorSébastien Escudier <sebastien-devel@celeos.eu>
Wed, 25 May 2011 12:16:36 +0000 (14:16 +0200)
committerSébastien Escudier <sebastien-devel@celeos.eu>
Tue, 31 May 2011 11:17:36 +0000 (13:17 +0200)
This reverts vlm callback behaviour before 67b16b1b9f1babba51ca186a5a1107156f897c09

include/vlc_input.h
src/input/input.c
src/input/vlm.c

index 8f64c25fc3b1b0fbfa961dcce0b1bfed5f105cc8..266a0ce066b8549100e9836552c8632afc8652e7 100644 (file)
@@ -544,6 +544,8 @@ VLC_API int input_vaControl( input_thread_t *, int i_query, va_list  );
 VLC_API int input_Control( input_thread_t *, int i_query, ...  );
 
 VLC_API void input_Close( input_thread_t * );
+void input_Join( input_thread_t * );
+void input_Release( input_thread_t * );
 
 /**
  * Get the input item for an input thread
index 5d384efce2947b8083dda71a639d5134550f7633..efe6b8ed6f0e8d5c7c04abdb9e5e6b275ead3879 100644 (file)
@@ -252,6 +252,17 @@ void input_Stop( input_thread_t *p_input, bool b_abort )
     input_ControlPush( p_input, INPUT_CONTROL_SET_DIE, NULL );
 }
 
+void input_Join( input_thread_t *p_input )
+{
+    if( p_input->p->is_running )
+        vlc_join( p_input->p->thread, NULL );
+}
+
+void input_Release( input_thread_t *p_input )
+{
+    vlc_object_release( p_input );
+}
+
 /**
  * Close an input
  *
@@ -259,9 +270,8 @@ void input_Stop( input_thread_t *p_input, bool b_abort )
  */
 void input_Close( input_thread_t *p_input )
 {
-    if( p_input->p->is_running )
-        vlc_join( p_input->p->thread, NULL );
-    vlc_object_release( p_input );
+    input_Join( p_input );
+    input_Release( p_input );
 }
 
 /**
index 3df530e7728f3e255ad38ac7197dc069a953e2f4..66dfbf7bf817408a6fcb649006401eee4e2b0fda 100644 (file)
@@ -912,8 +912,9 @@ static void vlm_MediaInstanceDelete( vlm_t *p_vlm, int64_t id, vlm_media_instanc
     if( p_input )
     {
         input_Stop( p_input, true );
+        input_Join( p_input );
         var_DelCallback( p_instance->p_input, "intf-event", InputEvent, p_media );
-        input_Close( p_input );
+        input_Release( p_input );
 
         vlm_SendEventMediaInstanceStopped( p_vlm, id, p_media->cfg.psz_name );
     }
@@ -1006,8 +1007,9 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char *
 
 
         input_Stop( p_input, true );
+        input_Join( p_input );
         var_DelCallback( p_instance->p_input, "intf-event", InputEvent, p_media );
-        input_Close( p_input );
+        input_Release( p_input );
 
         if( !p_instance->b_sout_keep )
             input_resource_TerminateSout( p_instance->p_input_resource );