Changeset 7ca46db5b0de9a4f15de790990303cc46b496e24

Show
Ignore:
Timestamp:
06/28/08 21:22:00 (2 months ago)
Author:
Rémi Denis-Courmont <rdenis@simphalempin.com>
git-committer:
Rémi Denis-Courmont <rdenis@simphalempin.com> 1214680920 +0300
git-parent:

[c2c6729b7abd3a0d1096c79251a6d05a2e9a3403]

git-author:
Rémi Denis-Courmont <rdenis@simphalempin.com> 1214680920 +0300
Message:

playlist: release video outputs *once* - fixes #1593

Releasing other thread's references is not a very good idea...

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/playlist/engine.c

    rb437d81 r7ca46db  
    182182static void ObjectGarbageCollector( playlist_t *p_playlist, bool b_force ) 
    183183{ 
    184     vlc_object_t *p_obj; 
    185  
    186184    if( !b_force ) 
    187185    { 
     
    196194 
    197195    vlc_mutex_lock( &p_playlist->gc_lock ); 
    198     while( ( p_obj = vlc_object_find( p_playlist->p_libvlc, VLC_OBJECT_VOUT, 
    199                                                   FIND_CHILD ) ) ) 
    200     { 
    201         vlc_object_release( p_obj ); 
    202         if( p_obj->p_parent == VLC_OBJECT(p_playlist->p_libvlc) ) 
    203         { 
    204             msg_Dbg( p_playlist, "garbage collector destroying 1 vout" ); 
    205             vlc_object_release( p_obj ); /* Hmm, is this (thread-)safe?? */ 
    206         } 
     196    /* Remove video outputs when user presses stop: */ 
     197    vlc_list_t *list = vlc_list_find( p_playlist->p_libvlc, VLC_OBJECT_VOUT, 
     198                                      FIND_CHILD ); 
     199    if( list != NULL ) 
     200    { 
     201        msg_Dbg( p_playlist, "removing %u vout(s)", list->i_count ); 
     202        for( int i = 0; i < list->i_count; i++) 
     203            vlc_object_release( list->p_values[i].p_object ); 
     204        vlc_list_release( list ); 
    207205    } 
    208206    p_playlist->b_cant_sleep = false;