diff --git a/include/vlc_input.h b/include/vlc_input.h index 8f64c25fc3b1b0fbfa961dcce0b1bfed5f105cc8..266a0ce066b8549100e9836552c8632afc8652e7 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -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 diff --git a/src/input/input.c b/src/input/input.c index 5d384efce2947b8083dda71a639d5134550f7633..efe6b8ed6f0e8d5c7c04abdb9e5e6b275ead3879 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -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 ); } /** diff --git a/src/input/vlm.c b/src/input/vlm.c index 3df530e7728f3e255ad38ac7197dc069a953e2f4..66dfbf7bf817408a6fcb649006401eee4e2b0fda 100644 --- a/src/input/vlm.c +++ b/src/input/vlm.c @@ -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 );