Beispiel #1
0
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;
    }
}
Beispiel #2
0
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 );
}