[vlc-devel] [RFC PATCH] es_out: Stop decoder wait before flush

Thomas Guillem thomas at gllm.fr
Tue Nov 10 10:25:37 CET 2015


Currently, DecoderThread will deadlock in DecoderWaitUnblock if
input_DecoderFlush is called while es_out is buffering.

A obvious way to fix this deadlock is to stop decoder wait via
input_DecoderStopWait before calling input_DecoderFlush.
---
 src/input/es_out.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/input/es_out.c b/src/input/es_out.c
index 72dbbde..c94982e 100644
--- a/src/input/es_out.c
+++ b/src/input/es_out.c
@@ -579,13 +579,16 @@ static void EsOutChangePosition( es_out_t *out )
 
         if( p_es->p_dec != NULL )
         {
-            input_DecoderFlush( p_es->p_dec );
-            if( !p_sys->b_buffering )
+            if( p_sys->b_buffering )
             {
-                input_DecoderStartWait( p_es->p_dec );
+                input_DecoderStopWait( p_es->p_dec );
                 if( p_es->p_dec_record != NULL )
-                    input_DecoderStartWait( p_es->p_dec_record );
+                    input_DecoderStopWait( p_es->p_dec_record );
             }
+            input_DecoderFlush( p_es->p_dec );
+            input_DecoderStartWait( p_es->p_dec );
+            if( p_es->p_dec_record != NULL )
+                input_DecoderStartWait( p_es->p_dec_record );
         }
     }
 
-- 
2.1.4



More information about the vlc-devel mailing list