Changeset de9d74a605bbf57f524b309cff22763d3e38638f

Show
Ignore:
Timestamp:
29/09/06 21:48:53 (2 years ago)
Author:
Clément Stenac <zorglub@videolan.org>
git-committer:
Clément Stenac <zorglub@videolan.org> 1159559333 +0000
git-parent:

[a0cbc6edd7b71c259ab351e37262c3bf4bd783b0]

git-author:
Clément Stenac <zorglub@videolan.org> 1159559333 +0000
Message:

Don't loop preparse threads when idle
Compile fix

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/meta_engine/folder.c

    r5b83fdc rde9d74a  
    124124    } 
    125125 
    126     i_meta = input_GetMetaEngineFlags( p_item->p_meta ); 
     126    i_meta = input_CurrentMetaFlags( p_item->p_meta ); 
    127127    p_me->i_mandatory &= ~i_meta; 
    128128    p_me->i_optional &= ~i_meta; 
  • modules/meta_engine/musicbrainz.c

    r5b83fdc rde9d74a  
    133133    mb_Delete( p_mb ); 
    134134 
    135     i_meta = input_GetMetaEngineFlags( p_item->p_meta ); 
     135    i_meta = input_CurrentMetaFlags( p_item->p_meta ); 
    136136    p_me->i_mandatory &= ~i_meta; 
    137137    p_me->i_optional &= ~i_meta; 
  • src/playlist/control.c

    r2d90e86 rde9d74a  
    199199                 p_item ); 
    200200    vlc_mutex_unlock( &p_playlist->p_preparse->object_lock ); 
     201    vlc_cond_signal( &p_playlist->p_preparse->object_wait ); 
    201202    return VLC_SUCCESS; 
    202203} 
     
    230231    INSERT_ELEM( p_playlist->p_secondary_preparse->p_waiting, 
    231232                 p_playlist->p_secondary_preparse->i_waiting, 
    232                  i, 
    233                  p ); 
     233                 i, p ); 
    234234    vlc_mutex_unlock( &p_playlist->p_secondary_preparse->object_lock ); 
     235    vlc_cond_signal( &p_playlist->p_secondary_preparse->object_lock ); 
    235236    return VLC_SUCCESS; 
    236237} 
  • src/playlist/engine.c

    ra0cbc6e rde9d74a  
    447447{ 
    448448    playlist_t *p_playlist = (playlist_t *)p_obj->p_parent; 
     449    input_item_t *p_current; 
    449450    int i_activity; 
    450451    uint32_t i_m, i_o; 
    451452 
    452     vlc_mutex_lock( &p_obj->object_lock ); 
    453  
    454     if( p_obj->i_waiting > 0 ) 
    455     { 
    456         input_item_t *p_current = p_obj->pp_waiting[0]; 
     453    while( !p_playlist->b_die ) 
     454    { 
     455        vlc_mutex_lock( &p_obj->object_lock ); 
     456        while( p_obj->i_waiting == 0 ) 
     457        { 
     458            vlc_cond_wait( &p_obj->object_wait, &p_obj->object_lock ); 
     459            if( p_playlist->b_die ) 
     460            { 
     461                vlc_mutex_unlock( &p_obj->object_lock ); 
     462                return; 
     463            } 
     464        } 
     465 
     466        p_current = p_obj->pp_waiting[0]; 
    457467        REMOVE_ELEM( p_obj->pp_waiting, p_obj->i_waiting, 0 ); 
    458468        vlc_mutex_unlock( &p_obj->object_lock ); 
     469 
    459470        PL_LOCK; 
    460471        if( p_current ) 
     
    485496            } 
    486497            PL_LOCK; 
     498 
    487499            /* If we haven't retrieved enough meta, add to secondary queue 
    488500             * which will run the "meta fetchers" 
     
    504516                vlc_mutex_unlock( 
    505517                            &p_playlist->p_secondary_preparse->object_lock); 
     518                vlc_cond_signal( 
     519                            &p_playlist->p_secondary_preparse->object_wait ); 
    506520            } 
    507521            else 
     
    516530        if( i_activity < 0 ) i_activity = 0; 
    517531        vlc_mutex_unlock( &p_obj->object_lock ); 
     532        /* Sleep at least 1ms */ 
    518533        msleep( (i_activity+1) * 1000 ); 
    519         return; 
    520     } 
    521     vlc_mutex_unlock( &p_obj->object_lock ); 
     534    } 
    522535} 
    523536 
     
    526539{ 
    527540    playlist_t *p_playlist = (playlist_t *)p_obj->p_parent; 
    528  
    529     vlc_mutex_lock( &p_obj->object_lock ); 
    530  
    531     if( p_obj->i_waiting > 0 ) 
    532     { 
    533         vlc_bool_t b_fetch_art = p_obj->p_waiting->b_fetch_art; 
    534         input_item_t *p_item = p_obj->p_waiting->p_item; 
     541    vlc_bool_t b_fetch_art; 
     542    input_item_t *p_item; 
     543    int i_activity; 
     544 
     545    while( !p_playlist->b_die ) 
     546    { 
     547        vlc_mutex_lock( &p_obj->object_lock ); 
     548        while( p_obj->i_waiting == 0 ) 
     549        { 
     550            vlc_cond_wait( &p_obj->object_wait, &p_obj->object_lock ); 
     551            if( p_playlist->b_die ) 
     552            { 
     553                vlc_mutex_unlock( &p_obj->object_lock ); 
     554                return; 
     555            } 
     556        } 
     557 
     558        b_fetch_art = p_obj->p_waiting->b_fetch_art; 
     559        p_item = p_obj->p_waiting->p_item; 
    535560        REMOVE_ELEM( p_obj->p_waiting, p_obj->i_waiting, 0 ); 
    536561        vlc_mutex_unlock( &p_obj->object_lock ); 
     
    550575            vlc_gc_decref( p_item ); 
    551576        } 
    552         return; 
    553     } 
    554     vlc_mutex_unlock( &p_obj->object_lock ); 
     577        vlc_mutex_lock( &p_obj->object_lock ); 
     578        i_activity = var_GetInteger( p_playlist, "activity" ); 
     579        if( i_activity < 0 ) i_activity = 0; 
     580        vlc_mutex_unlock( &p_obj->object_lock ); 
     581        /* Sleep at least 1ms */ 
     582        msleep( (i_activity+1) * 1000 ); 
     583    } 
    555584} 
    556585 
  • src/playlist/thread.c

    r2d90e86 rde9d74a  
    143143int playlist_ThreadDestroy( playlist_t * p_playlist ) 
    144144{ 
    145     p_playlist->b_die = 1; 
     145    p_playlist->b_die = VLC_TRUE; 
     146    if( p_playlist->p_preparse ) 
     147        vlc_cond_signal( &p_playlist->p_preparse->object_wait ); 
     148    if( p_playlist->p_secondary_preparse ) 
     149        vlc_cond_signal( &p_playlist->p_secondary_preparse->object_wait ); 
    146150 
    147151    DestroyInteraction( p_playlist ); 
     
    209213    vlc_thread_ready( p_obj ); 
    210214 
    211     while( !p_playlist->b_die ) 
    212     { 
    213         playlist_PreparseLoop( p_obj ); 
    214         if( p_obj->i_waiting == 0 ) 
    215         { 
    216             msleep( INTF_IDLE_SLEEP ); 
    217         } 
    218     } 
     215    playlist_PreparseLoop( p_obj ); 
    219216} 
    220217 
     
    225222    vlc_thread_ready( p_obj ); 
    226223 
    227     while( !p_playlist->b_die ) 
    228     { 
    229         playlist_SecondaryPreparseLoop( p_obj ); 
    230         if( p_obj->i_waiting == 0 ) 
    231         { 
    232             msleep( INTF_IDLE_SLEEP ); 
    233         } 
    234     } 
     224    playlist_SecondaryPreparseLoop( p_obj ); 
    235225} 
    236226