/* 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 );
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;
/* 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 );
}
* (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 );