]> git.sesse.net Git - vlc/commitdiff
Fixed by decrementing the i_refcount variable in the correct manner -
authorPhil Roffe and David Grellscheid <philip.roffe@durham.ac.uk>
Tue, 14 Apr 2009 18:43:12 +0000 (20:43 +0200)
committerAntoine Cellerier <dionoea@videolan.org>
Tue, 14 Apr 2009 18:43:37 +0000 (20:43 +0200)
and therefore freeing the memory only when the i_refcount successfully
went to 0.

The problem was that i_refcount is an unsigned variable, and was being
decremented twice, once erroneously by mosaic_bridge, and then again in
the picture's original pf_release function. If i_refcount started at 1,
it wrapped to the maximum unsigned value rather than -1, failing the
refcount tests in the pf_release function.

Patch Authors: Phil Roffe and David Grellscheid

Signed-off-by: Antoine Cellerier <dionoea@videolan.org>
modules/stream_out/mosaic_bridge.c

index e7a8d85e809bdc4100cfe0dc69c302516470fcb2..4a8e6382e5c7eb0b8e82fa9bf70c967855e08ed0 100644 (file)
@@ -80,8 +80,6 @@ static void ReleasePicture( picture_t *p_pic )
 {
     assert( p_pic );
 
-    if( --p_pic->i_refcount > 0 )
-        return;
 
     if( p_pic->p_sys )
     {
@@ -91,9 +89,12 @@ static void ReleasePicture( picture_t *p_pic )
     }
     else
     {
-        free( p_pic->p_q );
-        free( p_pic->p_data_orig );
-        free( p_pic );
+        if( --p_pic->i_refcount == 0 )
+        {
+            free( p_pic->p_q );
+            free( p_pic->p_data_orig );
+            free( p_pic );
+        }
     }
 }