[vlc-commits] opensles: avoid infinite loop in linked list
    Rafaël Carré 
    git at videolan.org
       
    Sat Dec 15 16:56:50 CET 2012
    
    
  
vlc | branch: master | Rafaël Carré <funman at videolan.org> | Sat Dec 15 16:56:15 2012 +0100| [901267b6b3270d54c0deef0855d72809c7bf9398] | committer: Rafaël Carré
opensles: avoid infinite loop in linked list
this can happen when moving buffers between our 2 linked lists
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=901267b6b3270d54c0deef0855d72809c7bf9398
---
 modules/audio_output/opensles_android.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/modules/audio_output/opensles_android.c b/modules/audio_output/opensles_android.c
index 40b4fdb..a844901 100644
--- a/modules/audio_output/opensles_android.c
+++ b/modules/audio_output/opensles_android.c
@@ -195,6 +195,8 @@ static int WriteBuffer(audio_output_t *p_aout)
     /* If something bad happens, we must remove this buffer from the FIFO */
     block_t **pp_last_saved = p_sys->pp_last;
     block_t *p_last_saved = *pp_last_saved;
+    block_t *next_saved = b->p_next;
+    b->p_next = NULL;
 
     /* Put this block in the list of audio already written to opensles */
     block_ChainLastAppend( &p_sys->pp_last, b );
@@ -214,12 +216,15 @@ static int WriteBuffer(audio_output_t *p_aout)
             p_sys->pp_buffer_last = &p_sys->p_buffer_chain;
     } else {
         /* Remove that block from the list of audio already written */
-        msg_Err( p_aout, "error %lu%s", r, (r == SL_RESULT_BUFFER_INSUFFICIENT)
+        msg_Err( p_aout, "error %lu%s (%d bytes)", r, (r == SL_RESULT_BUFFER_INSUFFICIENT)
                 ? " buffer insufficient"
-                : "");
+                : "", b->i_buffer);
 
         p_sys->pp_last = pp_last_saved;
         *pp_last_saved = p_last_saved;
+
+        b->p_next = next_saved;
+
         p_sys->length -= len;
         next = NULL; /* We'll try again next time */
     }
    
    
More information about the vlc-commits
mailing list