*****************************************************************************/
static void vlm_Destructor( vlm_t *p_vlm );
-static void* Manage( vlc_object_t * );
+static void* Manage( void * );
static int vlm_MediaVodControl( void *, vod_media_t *, const char *, int, va_list );
/*****************************************************************************
p_vlm = *pp_vlm;
if( p_vlm )
{ /* VLM already exists */
- vlc_object_yield( p_vlm );
+ vlc_object_hold( p_vlm );
vlc_mutex_unlock( lockval.p_address );
return p_vlm;
}
p_vlm->p_vod = NULL;
vlc_object_attach( p_vlm, p_this->p_libvlc );
- if( vlc_thread_create( p_vlm, "vlm thread",
- Manage, VLC_THREAD_PRIORITY_LOW, false ) )
+ if( vlc_clone( &p_vlm->thread, Manage, p_vlm, VLC_THREAD_PRIORITY_LOW ) )
{
vlc_mutex_destroy( &p_vlm->lock );
vlc_object_release( p_vlm );
* is serialized against setting libvlc_priv->p_vlm from vlm_New(). */
var_Get( p_vlm->p_libvlc, "vlm_mutex", &lockval );
vlc_mutex_lock( lockval.p_address );
- vlc_object_kill( p_vlm );
- vlc_thread_join( p_vlm );
vlc_object_release( p_vlm );
vlc_mutex_unlock( lockval.p_address );
}
vlm_ControlInternal( p_vlm, VLM_CLEAR_SCHEDULES );
TAB_CLEAN( p_vlm->schedule, p_vlm->schedule );
+ vlc_object_kill( p_vlm );
+ /*vlc_cancel( p_vlm->thread ); */
+ vlc_join( p_vlm->thread, NULL );
vlc_mutex_destroy( &p_vlm->lock );
}
/*****************************************************************************
* Manage:
*****************************************************************************/
-static void* Manage( vlc_object_t* p_object )
+static void* Manage( void* p_object )
{
vlm_t *vlm = (vlm_t*)p_object;
int i, j;
mtime_t i_lastcheck;
mtime_t i_time;
+ int canc = vlc_savecancel ();
i_lastcheck = vlm_Date();
while( !vlm->b_die )
msleep( 100000 );
}
+ vlc_restorecancel (canc);
return NULL;
}
msleep( 100000 );
input_StopThread( p_input );
+ vlc_thread_join( p_input );
vlc_object_release( p_input );
}
free( psz_header );
p_vlm->p_vod = vlc_custom_create( VLC_OBJECT(p_vlm), sizeof( vod_t ),
VLC_OBJECT_GENERIC, "vod server" );
vlc_object_attach( p_vlm->p_vod, p_vlm );
- p_vlm->p_vod->p_module = module_Need( p_vlm->p_vod, "vod server", 0, 0 );
+ p_vlm->p_vod->p_module = module_need( p_vlm->p_vod, "vod server", 0, 0 );
if( !p_vlm->p_vod->p_module )
{
msg_Err( p_vlm, "cannot find vod server" );
/* Check if we need to unload the VOD server */
if( p_vlm->p_vod && p_vlm->i_vod <= 0 )
{
- module_Unneed( p_vlm->p_vod, p_vlm->p_vod->p_module );
+ module_unneed( p_vlm->p_vod, p_vlm->p_vod->p_module );
vlc_object_detach( p_vlm->p_vod );
vlc_object_release( p_vlm->p_vod );
p_vlm->p_vod = NULL;