]> git.sesse.net Git - vlc/commitdiff
block_FifoEmpty: reduce contention scope
authorRémi Denis-Courmont <remi@remlab.net>
Mon, 16 Nov 2009 17:56:07 +0000 (19:56 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Mon, 16 Nov 2009 17:56:07 +0000 (19:56 +0200)
src/misc/block.c

index 43b3ec49b4dbe474540a07384d5d758faa1b37a5..18f7b03ef6b45c6e43d94766af1b281de1e46410 100644 (file)
@@ -508,23 +508,27 @@ void block_FifoRelease( block_fifo_t *p_fifo )
 
 void block_FifoEmpty( block_fifo_t *p_fifo )
 {
-    block_t *b;
+    block_t *block;
 
     vlc_mutex_lock( &p_fifo->lock );
-    for( b = p_fifo->p_first; b != NULL; )
+    block = p_fifo->p_first;
+    if (block != NULL)
     {
-        block_t *p_next;
-
-        p_next = b->p_next;
-        block_Release( b );
-        b = p_next;
+        p_fifo->i_depth = p_fifo->i_size = 0;
+        p_fifo->p_first = NULL;
+        p_fifo->pp_last = &p_fifo->p_first;
     }
-
-    p_fifo->i_depth = p_fifo->i_size = 0;
-    p_fifo->p_first = NULL;
-    p_fifo->pp_last = &p_fifo->p_first;
     vlc_cond_broadcast( &p_fifo->wait_room );
     vlc_mutex_unlock( &p_fifo->lock );
+
+    while (block != NULL)
+    {
+        block_t *buf;
+
+        buf = block->p_next;
+        block_Release (block);
+        block = buf;
+    }
 }
 
 /**