static void Close( vlc_object_t *p_this ) { stream_t *s = (stream_t*)p_this; stream_sys_t *p_sys = s->p_sys; vlc_mutex_lock( &p_sys->download.lock_wait ); p_sys->b_close = true; /* Negate the condition variable's predicate */ for( int i = 0; i < 3; i++ ) p_sys->download.lead[i] = 0; p_sys->playback.toffset = 0; vlc_cond_signal(&p_sys->download.wait); vlc_mutex_unlock( &p_sys->download.lock_wait ); vlc_join( p_sys->thread, NULL ); vlc_mutex_destroy( &p_sys->download.lock_wait ); vlc_cond_destroy( &p_sys->download.wait ); /* Free sms streams */ sms_stream_t *sms; for( int i = 0; i < vlc_array_count( p_sys->sms_streams ); i++ ) { sms = vlc_array_item_at_index( p_sys->sms_streams, i ); if( sms ) sms_Free( sms ); } /* Free downloaded chunks */ chunk_t *chunk; for( int i = 0; i < vlc_array_count( p_sys->init_chunks ); i++ ) { chunk = vlc_array_item_at_index( p_sys->init_chunks, i ); chunk_Free( chunk ); } sms_queue_free( p_sys->bws ); vlc_array_destroy( p_sys->sms_streams ); vlc_array_destroy( p_sys->selected_st ); vlc_array_destroy( p_sys->download.chunks ); vlc_array_destroy( p_sys->init_chunks ); free( p_sys->base_url ); free( p_sys ); }
static void SysCleanup( stream_sys_t *p_sys ) { if ( p_sys->sms_streams ) { for ( int i=0; i< p_sys->sms_streams->i_count ; i++ ) sms_Free( p_sys->sms_streams->pp_elems[i] ); vlc_array_destroy( p_sys->sms_streams ); } vlc_array_destroy( p_sys->selected_st ); vlc_array_destroy( p_sys->download.chunks ); if ( p_sys->init_chunks ) { for ( int i=0; i< p_sys->init_chunks->i_count ; i++ ) chunk_Free( p_sys->init_chunks->pp_elems[i] ); vlc_array_destroy( p_sys->init_chunks ); } sms_queue_free( p_sys->bws ); free( p_sys->base_url ); }