From: Steven Walters Date: Fri, 20 Nov 2009 20:04:13 +0000 (-0800) Subject: Fix extremely rare deadlock with sync-lookahead X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d38bce2c91c2d766f5611c6b100674ad66016e1f;p=libx264 Fix extremely rare deadlock with sync-lookahead Patch partially by Anton Mitrofanov. --- diff --git a/encoder/encoder.c b/encoder/encoder.c index 407e4f47..aac9ad39 100644 --- a/encoder/encoder.c +++ b/encoder/encoder.c @@ -1958,8 +1958,10 @@ int x264_encoder_encode( x264_t *h, else { /* signal kills for lookahead thread */ + x264_pthread_mutex_lock( &h->lookahead->ifbuf.mutex ); h->lookahead->b_exit_thread = 1; x264_pthread_cond_broadcast( &h->lookahead->ifbuf.cv_fill ); + x264_pthread_mutex_unlock( &h->lookahead->ifbuf.mutex ); } h->i_frame++; diff --git a/encoder/lookahead.c b/encoder/lookahead.c index 298ec661..f2bed16a 100644 --- a/encoder/lookahead.c +++ b/encoder/lookahead.c @@ -166,8 +166,10 @@ void x264_lookahead_delete( x264_t *h ) { if( h->param.i_sync_lookahead ) { + x264_pthread_mutex_lock( &h->lookahead->ifbuf.mutex ); h->lookahead->b_exit_thread = 1; x264_pthread_cond_broadcast( &h->lookahead->ifbuf.cv_fill ); + x264_pthread_mutex_unlock( &h->lookahead->ifbuf.mutex ); x264_pthread_join( h->thread[h->param.i_threads]->thread_handle, NULL ); x264_macroblock_cache_end( h->thread[h->param.i_threads] ); x264_free( h->thread[h->param.i_threads] );