X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=modules%2Faudio_output%2Falsa.c;h=e16a05f78543c0b3397431cfe6be22ec4db28e57;hb=588723d7c65ccdb0fa5cc39b3cae132176637300;hp=c6d7a58d99e09ddb1a6ca91850816236c6ec0c89;hpb=3561b9b28f58eb7a4183e158a8fd973800d31ceb;p=vlc diff --git a/modules/audio_output/alsa.c b/modules/audio_output/alsa.c index c6d7a58d99..e16a05f785 100644 --- a/modules/audio_output/alsa.c +++ b/modules/audio_output/alsa.c @@ -313,10 +313,7 @@ static int Open( vlc_object_t *p_this ) /* Allocate structures */ p_aout->output.p_sys = p_sys = malloc( sizeof( aout_sys_t ) ); if( p_sys == NULL ) - { - msg_Err( p_aout, "out of memory" ); return VLC_ENOMEM; - } p_sys->b_playing = false; p_sys->start_date = 0; vlc_cond_init( p_aout, &p_sys->wait ); @@ -733,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; @@ -767,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 ); } @@ -879,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 );