]> git.sesse.net Git - x264/commitdiff
Fix extremely rare deadlock with sync-lookahead
authorSteven Walters <kemuri9@gmail.com>
Fri, 20 Nov 2009 20:04:13 +0000 (12:04 -0800)
committerFiona Glaser <fiona@x264.com>
Sat, 21 Nov 2009 19:48:27 +0000 (11:48 -0800)
Patch partially by Anton Mitrofanov.

encoder/encoder.c
encoder/lookahead.c

index 407e4f47773602b94b5f25faf077d7777e3357b4..aac9ad3941688b86641e05a0dab46f57a7dbdd7a 100644 (file)
@@ -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++;
index 298ec661e15438aee00a50a57ebeb1b7c6896e1b..f2bed16ab6a471e2853baa0d946463764f1c6ab1 100644 (file)
@@ -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] );