From: RĂ©mi Denis-Courmont Date: Sat, 15 Sep 2007 15:27:13 +0000 (+0000) Subject: Remove interface b_block property. X-Git-Tag: 0.9.0-test0~5604 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=f02445b5a33a8e657497bc00b59c7520f3f1c8a8;p=vlc Remove interface b_block property. --- diff --git a/include/vlc_interface.h b/include/vlc_interface.h index 1577521883..ef1bffaabd 100644 --- a/include/vlc_interface.h +++ b/include/vlc_interface.h @@ -54,7 +54,6 @@ struct intf_thread_t VLC_COMMON_MEMBERS /* Thread properties and locks */ - vlc_bool_t b_block; vlc_bool_t b_play; /* Specific interfaces */ diff --git a/modules/codec/cmml/cmml.c b/modules/codec/cmml/cmml.c index 7d8d9b1f82..446a7f882d 100644 --- a/modules/codec/cmml/cmml.c +++ b/modules/codec/cmml/cmml.c @@ -127,7 +127,6 @@ static int OpenDecoder( vlc_object_t *p_this ) /* initialise the CMML responder interface */ p_sys->p_intf = intf_Create( p_dec, "cmml", 0, NULL ); - p_sys->p_intf->b_block = VLC_FALSE; intf_RunThread( p_sys->p_intf ); return VLC_SUCCESS; diff --git a/modules/control/ntservice.c b/modules/control/ntservice.c index 31b942a1c5..9b716a6bca 100644 --- a/modules/control/ntservice.c +++ b/modules/control/ntservice.c @@ -324,7 +324,6 @@ static void WINAPI ServiceDispatch( DWORD numArgs, char **args ) } /* Try to run the interface */ - p_new_intf->b_block = VLC_FALSE; if( intf_RunThread( p_new_intf ) ) { vlc_object_detach( p_new_intf ); diff --git a/modules/control/rc.c b/modules/control/rc.c index f874fb6f3e..24eec8b10a 100644 --- a/modules/control/rc.c +++ b/modules/control/rc.c @@ -1462,7 +1462,6 @@ static int Intf( vlc_object_t *p_this, char const *psz_cmd, p_newintf = intf_Create( p_this->p_libvlc, newval.psz_string, 0, NULL ); if( p_newintf ) { - p_newintf->b_block = VLC_FALSE; if( intf_RunThread( p_newintf ) ) { vlc_object_detach( p_newintf ); diff --git a/src/interface/interface.c b/src/interface/interface.c index 7ed0822ede..a01f88cc91 100644 --- a/src/interface/interface.c +++ b/src/interface/interface.c @@ -136,14 +136,11 @@ intf_thread_t* __intf_Create( vlc_object_t *p_this, const char *psz_module, /***************************************************************************** * intf_RunThread: launch the interface thread ***************************************************************************** - * This function either creates a new thread and runs the interface in it, - * or runs the interface in the current thread, depending on b_block. + * This function either creates a new thread and runs the interface in it. *****************************************************************************/ /** - * Run the interface thread. + * Starts and runs the interface thread. * - * If b_block is not set, runs the interface in the thread, else, - * creates a new thread and runs the interface. * \param p_intf the interface thread * \return VLC_SUCCESS on success, an error number else */ @@ -172,51 +169,26 @@ int intf_RunThread( intf_thread_t *p_intf ) } else #endif - if( p_intf->b_block ) + + /* This interface doesn't need to be run */ + if( p_intf->pf_run == NULL ) + return VLC_SUCCESS; + + /* Run the interface in a separate thread */ + if( !strcmp( p_intf->p_module->psz_object_name, "macosx" ) ) { - /* If we are clivlc+macosx, don't run the macosx GUI */ - if( !strcmp( p_intf->p_module->psz_object_name, "macosx" ) ) - { - msg_Err( p_intf, "You cannot run the MacOS X module as an " - "interface in clivlc mode. Please read the " - "README.MacOSX.rtf file."); - return VLC_EGENERIC; - } - - /* If the main interface does not have a run function, - * implement a waiting loop ourselves - */ - if( p_intf->pf_run ) - RunInterface( p_intf ); - else - { - while( !intf_ShouldDie( p_intf ) ) - msleep( INTF_IDLE_SLEEP * 2); - } - vlc_object_kill( p_intf ); + msg_Err( p_intf, "You cannot run the MacOS X module as an " + "extra interface. Please read the " + "README.MacOSX.rtf file."); + return VLC_EGENERIC; } - else - { - /* This interface doesn't need to be run */ - if( !p_intf->pf_run ) - return VLC_SUCCESS; - - /* Run the interface in a separate thread */ - if( !strcmp( p_intf->p_module->psz_object_name, "macosx" ) ) - { - msg_Err( p_intf, "You cannot run the MacOS X module as an " - "extra interface. Please read the " - "README.MacOSX.rtf file."); - return VLC_EGENERIC; - } - /* Run the interface in a separate thread */ - if( vlc_thread_create( p_intf, "interface", RunInterface, - VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) ) - { - msg_Err( p_intf, "cannot spawn interface thread" ); - return VLC_EGENERIC; - } + /* Run the interface in a separate thread */ + if( vlc_thread_create( p_intf, "interface", RunInterface, + VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) ) + { + msg_Err( p_intf, "cannot spawn interface thread" ); + return VLC_EGENERIC; } return VLC_SUCCESS; @@ -232,14 +204,11 @@ int intf_RunThread( intf_thread_t *p_intf ) void intf_StopThread( intf_thread_t *p_intf ) { /* Tell the interface to die */ - if( !p_intf->b_block ) + vlc_object_kill( p_intf ); + if( p_intf->pf_run != NULL ) { - vlc_object_kill( p_intf ); - if( p_intf->pf_run ) - { - vlc_cond_signal( &p_intf->object_wait ); - vlc_thread_join( p_intf ); - } + vlc_cond_signal( &p_intf->object_wait ); + vlc_thread_join( p_intf ); } } @@ -426,7 +395,6 @@ static int AddIntfCallback( vlc_object_t *p_this, char const *psz_cmd, } /* Try to run the interface */ - p_intf->b_block = VLC_FALSE; if( intf_RunThread( p_intf ) != VLC_SUCCESS ) { vlc_object_detach( p_intf ); diff --git a/src/libvlc-common.c b/src/libvlc-common.c index f97f4defc1..861039227b 100644 --- a/src/libvlc-common.c +++ b/src/libvlc-common.c @@ -1132,7 +1132,6 @@ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, /* Try to run the interface */ p_intf->b_play = b_play; - p_intf->b_block = b_block; i_err = intf_RunThread( p_intf ); if( i_err ) { @@ -1141,6 +1140,22 @@ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, p_intf = NULL; return i_err; } + + if( b_block ) + { + /* FIXME: should be moved to interface/interface.c */ + if( p_intf->pf_run ) + vlc_thread_join( p_intf ); + else + { + vlc_mutex_lock( &p_intf->object_lock ); + vlc_cond_wait( &p_intf->object_wait, &p_intf->object_lock ); + vlc_mutex_unlock( &p_intf->object_lock ); + } + vlc_object_detach( p_intf ); + intf_Destroy( p_intf ); + } + return VLC_SUCCESS; }; diff --git a/src/video_output/vout_intf.c b/src/video_output/vout_intf.c index 1a45693bc9..aac53af30d 100644 --- a/src/video_output/vout_intf.c +++ b/src/video_output/vout_intf.c @@ -107,7 +107,7 @@ void *vout_RequestWindow( vout_thread_t *p_vout, for( i = 0; i < p_list->i_count; i++ ) { p_intf = (intf_thread_t *)p_list->p_values[i].p_object; - if( p_intf->b_block && p_intf->pf_request_window ) break; + if( p_intf->pf_request_window ) break; p_intf = NULL; }