vp8: avoid race condition on segment map.
authorAaron Colwell <acolwell@chromium.org>
Mon, 19 Mar 2012 03:03:00 +0000 (20:03 -0700)
committerRonald S. Bultje <rsbultje@gmail.com>
Mon, 19 Mar 2012 20:49:34 +0000 (13:49 -0700)
This change avoids accessing the segment map of the previous frame if
segmentation is not enabled for the current frame. The caller of
decode_mb_mode() only calls ff_thread_await_progress() on the reference
segmentation index array if segmentation is enabled, so Chromium's TSAN
will report a race when accessing this data while segmentation is not
enabled.

Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
libavcodec/vp8.c

index b5062e6..36518d5 100644 (file)
@@ -641,7 +641,7 @@ void decode_mb_mode(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, uint8_
 
     if (s->segmentation.update_map)
         *segment = vp8_rac_get_tree(c, vp8_segmentid_tree, s->prob->segmentid);
-    else
+    else if (s->segmentation.enabled)
         *segment = ref ? *ref : *segment;
     s->segment = *segment;