static void *vlc_timer_thread (void *data) { struct vlc_timer *timer = data; mtime_t value, interval; vlc_mutex_lock (&timer->lock); value = timer->value; interval = timer->interval; vlc_mutex_unlock (&timer->lock); for (;;) { vlc_thread_t th; mwait (value); vlc_mutex_lock (&timer->lock); if (vlc_clone (&th, vlc_timer_do, timer, VLC_THREAD_PRIORITY_INPUT)) timer->overruns++; else { vlc_detach (th); timer->users++; } vlc_mutex_unlock (&timer->lock); if (interval == 0) return NULL; value += interval; } }
void playlist_preparser_Push( playlist_preparser_t *p_preparser, input_item_t *p_item ) { vlc_gc_incref( p_item ); vlc_mutex_lock( &p_preparser->lock ); INSERT_ELEM( p_preparser->pp_waiting, p_preparser->i_waiting, p_preparser->i_waiting, p_item ); if( !p_preparser->b_live ) { vlc_thread_t th; if( vlc_clone( &th, Thread, p_preparser, VLC_THREAD_PRIORITY_LOW ) ) msg_Warn( p_preparser->p_playlist, "cannot spawn pre-parser thread" ); else { vlc_detach( th ); p_preparser->b_live = true; } } vlc_mutex_unlock( &p_preparser->lock ); }