- vlc_cancel( p_fetcher->thread );
- vlc_join( p_fetcher->thread, NULL );
+ vlc_mutex_lock( &p_fetcher->lock );
+ if( p_fetcher->b_live )
+ {
+ vlc_object_kill( p_fetcher );
+ vlc_cancel( p_fetcher->thread );
+ }
+ b_join = p_fetcher->b_live || p_fetcher->b_zombie;
+ vlc_mutex_unlock( &p_fetcher->lock );
+ if( b_join )
+ vlc_join( p_fetcher->thread, NULL );