X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faudio_output%2Falsa.c;h=e16a05f78543c0b3397431cfe6be22ec4db28e57;hb=c1a89c642e30963c3c2d8f58b6f93bcc8bd94fc8;hp=5a2916fb47bc8978744e1006af73c1f9c92685fe;hpb=37a2578ce4265f4ed495290923e3fa674c662656;p=vlc diff --git a/modules/audio_output/alsa.c b/modules/audio_output/alsa.c index 5a2916fb47..e16a05f785 100644 --- a/modules/audio_output/alsa.c +++ b/modules/audio_output/alsa.c @@ -730,12 +730,15 @@ static void Close( vlc_object_t *p_this ) struct aout_sys_t * p_sys = p_aout->output.p_sys; int i_snd_rc; + /* Make sure that the thread will stop once it is waken up */ + vlc_object_kill( p_aout ); + /* make sure the audio output thread is waken up */ vlc_mutex_lock( &p_aout->output.p_sys->lock ); vlc_cond_signal( &p_aout->output.p_sys->wait ); vlc_mutex_unlock( &p_aout->output.p_sys->lock ); - vlc_object_kill( p_aout ); + /* */ vlc_thread_join( p_aout ); p_aout->b_die = false; @@ -764,16 +767,16 @@ static int ALSAThread( aout_instance_t * p_aout ) /* Wait for the exact time to start playing (avoids resampling) */ vlc_mutex_lock( &p_sys->lock ); - while( !p_sys->start_date && !p_aout->b_die ) + while( !p_sys->start_date && vlc_object_alive (p_aout) ) vlc_cond_wait( &p_sys->wait, &p_sys->lock ); vlc_mutex_unlock( &p_sys->lock ); - if( p_aout->b_die ) + if( !vlc_object_alive (p_aout) ) goto cleanup; mwait( p_sys->start_date - AOUT_PTS_TOLERANCE / 4 ); - while ( !p_aout->b_die ) + while ( vlc_object_alive (p_aout) ) { ALSAFill( p_aout ); } @@ -876,7 +879,7 @@ static void ALSAFill( aout_instance_t * p_aout ) * (stream is suspended and waiting for an application recovery) */ msg_Dbg( p_aout, "entering in suspend mode, trying to resume..." ); - while( !p_aout->b_die && !p_aout->p_libvlc->b_die && + while( vlc_object_alive (p_aout) && vlc_object_alive (p_aout->p_libvlc) && ( i_snd_rc = snd_pcm_resume( p_sys->p_snd_pcm ) ) == -EAGAIN ) { msleep( 1000000 );