Opened 20 months ago
Closed 19 months ago
#11456 closed defect (fixed)
ffvp9 race
| Reported by: | Ronald S. Bultje | Owned by: | Ronald S. Bultje <rsbultje@gmail.com> |
|---|---|---|---|
| Priority: | important | Component: | avcodec |
| Version: | git-master | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
From https://bugzilla.mozilla.org/show_bug.cgi?id=1941137
Reproduced on b9c99baced8f2cfe30b85080e19a39e15511e5ca (Feb 2nd, 2025)
Relevant input file: https://searchfox.org/mozilla-central/source/dom/media/test/gizmo.webm
Regression found on 252fc2e047297697dea78e63aa908377b47c2136, not present either on 240fd04db231efa4abad3abbd808140b4112324a or on 0957d62f (unclear from upstream report).
Compile FFmpeg with thread sanitizer:
$ while true; do ./ffmpeg -threads 4 -i ~/Downloads/gizmo.webm -an -f md5 -v error -nostats -y /tmp/out.log || break; x=`cat /tmp/out.log`; if [ $x != "MD5=a08e3e064e3589e5610bc2ccc2a4ab4c" ]; then break; fi; done
ffmpeg(7971,0x1144a1600) malloc: nano zone abandoned due to inability to preallocate reserved vm space.
[opus @ 0x7b5c00000700] Error parsing Opus packet header.
[these messages repeat a couple of times]
==================
WARNING: ThreadSanitizer: data race (pid=8053)
Read of size 1 at 0x7bb40003cb88 by thread T4 (mutexes: write M257):
#0 <null> <null>:2 (ffmpeg:x86_64+0x10187043f)
#1 ff_vp9_fill_mv <null>:2 (ffmpeg:x86_64+0x10186bcae)
#2 ff_vp9_decode_block <null>:2 (ffmpeg:x86_64+0x1017ac8b9)
#3 <null> <null>:2 (ffmpeg:x86_64+0x1017a21f9)
#4 <null> <null>:2 (ffmpeg:x86_64+0x10178f210)
#5 ff_decode_receive_frame_internal <null>:2 (ffmpeg:x86_64+0x100b75044)
#6 <null> <null>:2 (ffmpeg:x86_64+0x101429909)
Previous write of size 1 at 0x7bb40003cb88 by thread T3 (mutexes: write M255):
#0 ff_vp9_decode_block <null>:2 (ffmpeg:x86_64+0x1017a8305)
#1 <null> <null>:2 (ffmpeg:x86_64+0x1017a21f9)
#2 <null> <null>:2 (ffmpeg:x86_64+0x10178f210)
#3 ff_decode_receive_frame_internal <null>:2 (ffmpeg:x86_64+0x100b75044)
#4 <null> <null>:2 (ffmpeg:x86_64+0x101429909)
Location is heap block of size 37504 at 0x7bb40003c000 allocated by thread T1:
#0 posix_memalign <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x53603)
#1 av_malloc <null>:2 (ffmpeg:x86_64+0x101e2173a)
#2 av_refstruct_pool_get <null>:2 (ffmpeg:x86_64+0x101e36ce4)
#3 <null> <null>:2 (ffmpeg:x86_64+0x10178b915)
#4 ff_decode_receive_frame_internal <null>:2 (ffmpeg:x86_64+0x100b75044)
#5 <null> <null>:2 (ffmpeg:x86_64+0x101429909)
Mutex M257 (0x7b6800000510) created at:
#0 pthread_mutex_init <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2cd05)
#1 ff_pthread_init <null>:2 (ffmpeg:x86_64+0x101f4e4e1)
#2 <null> <null>:2 (ffmpeg:x86_64+0x101f4e7f4)
#3 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#4 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#5 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#6 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#7 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#8 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#9 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#10 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#11 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#13 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#14 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#15 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#16 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
Mutex M255 (0x7b6800000398) created at:
#0 pthread_mutex_init <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2cd05)
#1 ff_pthread_init <null>:2 (ffmpeg:x86_64+0x101f4e4e1)
#2 <null> <null>:2 (ffmpeg:x86_64+0x101f4e7f4)
#3 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#4 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#5 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#6 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#7 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#8 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#9 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#10 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#11 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#13 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#14 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#15 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#16 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
Thread T4 (tid=7141103, running) created by main thread at:
#0 pthread_create <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2bb6f)
#1 <null> <null>:2 (ffmpeg:x86_64+0x101f4e9d0)
#2 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#3 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#4 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#5 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#6 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#7 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#8 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#9 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#10 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#11 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#13 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#14 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#15 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
Thread T3 (tid=7141102, running) created by main thread at:
#0 pthread_create <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2bb6f)
#1 <null> <null>:2 (ffmpeg:x86_64+0x101f4e9d0)
#2 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#3 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#4 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#5 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#6 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#7 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#8 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#9 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#10 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#11 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#13 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#14 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#15 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
Thread T1 (tid=7141100, running) created by main thread at:
#0 pthread_create <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2bb6f)
#1 <null> <null>:2 (ffmpeg:x86_64+0x101f4e9d0)
#2 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#3 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#4 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#5 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#6 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#7 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#8 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#9 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#10 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#11 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#13 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#14 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#15 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
SUMMARY: ThreadSanitizer: data race (ffmpeg:x86_64+0x10187043f)
==================
==================
WARNING: ThreadSanitizer: data race (pid=8053)
Read of size 4 at 0x7bb40003cb80 by thread T4 (mutexes: write M257):
#0 <null> <null>:2 (ffmpeg:x86_64+0x1018706d6)
#1 ff_vp9_fill_mv <null>:2 (ffmpeg:x86_64+0x10186bcae)
#2 ff_vp9_decode_block <null>:2 (ffmpeg:x86_64+0x1017ac8b9)
#3 <null> <null>:2 (ffmpeg:x86_64+0x1017a21f9)
#4 <null> <null>:2 (ffmpeg:x86_64+0x10178f210)
#5 ff_decode_receive_frame_internal <null>:2 (ffmpeg:x86_64+0x100b75044)
#6 <null> <null>:2 (ffmpeg:x86_64+0x101429909)
Previous write of size 4 at 0x7bb40003cb80 by thread T3 (mutexes: write M255):
#0 ff_vp9_decode_block <null>:2 (ffmpeg:x86_64+0x1017a832a)
#1 <null> <null>:2 (ffmpeg:x86_64+0x1017a21f9)
#2 <null> <null>:2 (ffmpeg:x86_64+0x10178f210)
#3 ff_decode_receive_frame_internal <null>:2 (ffmpeg:x86_64+0x100b75044)
#4 <null> <null>:2 (ffmpeg:x86_64+0x101429909)
Location is heap block of size 37504 at 0x7bb40003c000 allocated by thread T1:
#0 posix_memalign <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x53603)
#1 av_malloc <null>:2 (ffmpeg:x86_64+0x101e2173a)
#2 av_refstruct_pool_get <null>:2 (ffmpeg:x86_64+0x101e36ce4)
#3 <null> <null>:2 (ffmpeg:x86_64+0x10178b915)
#4 ff_decode_receive_frame_internal <null>:2 (ffmpeg:x86_64+0x100b75044)
#5 <null> <null>:2 (ffmpeg:x86_64+0x101429909)
Mutex M257 (0x7b6800000510) created at:
#0 pthread_mutex_init <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2cd05)
#1 ff_pthread_init <null>:2 (ffmpeg:x86_64+0x101f4e4e1)
#2 <null> <null>:2 (ffmpeg:x86_64+0x101f4e7f4)
#3 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#4 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#5 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#6 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#7 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#8 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#9 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#10 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#11 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#13 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#14 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#15 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#16 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
Mutex M255 (0x7b6800000398) created at:
#0 pthread_mutex_init <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2cd05)
#1 ff_pthread_init <null>:2 (ffmpeg:x86_64+0x101f4e4e1)
#2 <null> <null>:2 (ffmpeg:x86_64+0x101f4e7f4)
#3 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#4 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#5 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#6 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#7 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#8 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#9 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#10 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#11 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#13 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#14 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#15 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#16 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
Thread T4 (tid=7141103, running) created by main thread at:
#0 pthread_create <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2bb6f)
#1 <null> <null>:2 (ffmpeg:x86_64+0x101f4e9d0)
#2 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#3 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#4 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#5 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#6 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#7 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#8 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#9 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#10 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#11 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#13 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#14 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#15 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
Thread T3 (tid=7141102, running) created by main thread at:
#0 pthread_create <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2bb6f)
#1 <null> <null>:2 (ffmpeg:x86_64+0x101f4e9d0)
#2 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#3 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#4 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#5 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#6 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#7 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#8 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#9 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#10 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#11 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#13 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#14 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#15 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
Thread T1 (tid=7141100, running) created by main thread at:
#0 pthread_create <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2bb6f)
#1 <null> <null>:2 (ffmpeg:x86_64+0x101f4e9d0)
#2 ff_frame_thread_init <null>:2 (ffmpeg:x86_64+0x101428d4b)
#3 ff_thread_init <null>:2 (ffmpeg:x86_64+0x101426b55)
#4 avcodec_open2 <null>:2 (ffmpeg:x86_64+0x1009dcca9)
#5 <null> <null>:2 (ffmpeg:x86_64+0x100002e80)
#6 dec_init <null>:2 (ffmpeg:x86_64+0x100002361)
#7 ist_use <null>:2 (ffmpeg:x86_64+0x1000079f9)
#8 ist_filter_add <null>:2 (ffmpeg:x86_64+0x100007b03)
#9 <null> <null>:2 (ffmpeg:x86_64+0x100014da1)
#10 fg_create_simple <null>:2 (ffmpeg:x86_64+0x100014b77)
#11 <null> <null>:2 (ffmpeg:x86_64+0x100029b96)
#12 <null> <null>:2 (ffmpeg:x86_64+0x100025ed8)
#13 of_open <null>:2 (ffmpeg:x86_64+0x1000200be)
#14 ffmpeg_parse_options <null>:2 (ffmpeg:x86_64+0x10002d451)
#15 main <null>:2 (ffmpeg:x86_64+0x1000463a4)
SUMMARY: ThreadSanitizer: data race (ffmpeg:x86_64+0x1018706d6)
==================
[opus @ 0x7b5c00000700] Error parsing Opus packet header.
ThreadSanitizer: reported 2 warnings
Abort trap: 6
Change History (3)
comment:1 by , 20 months ago
| Component: | undetermined → avcodec |
|---|---|
| Priority: | normal → important |
| Status: | new → open |
| Version: | unspecified → git-master |
comment:2 by , 20 months ago
This might be a mundane tsan issue. I can get the report to disappear with this patch:
$ git diff
diff --git a/libavcodec/threadprogress.c b/libavcodec/threadprogress.c
index 62c4fd898b..aa72ff80e7 100644
--- a/libavcodec/threadprogress.c
+++ b/libavcodec/threadprogress.c
@@ -55,9 +55,8 @@ void ff_thread_progress_report(ThreadProgress *pro, int n)
if (atomic_load_explicit(&pro->progress, memory_order_relaxed) >= n)
return;
- atomic_store_explicit(&pro->progress, n, memory_order_release);
-
ff_mutex_lock(&pro->progress_mutex);
+ atomic_store_explicit(&pro->progress, n, memory_order_release);
ff_cond_broadcast(&pro->progress_cond);
ff_mutex_unlock(&pro->progress_mutex);
}
comment:3 by , 19 months ago
| Owner: | set to |
|---|---|
| Resolution: | → fixed |
| Status: | open → closed |
In 586de32/ffmpeg:
Note:
See TracTickets
for help on using tickets.



Regression since 7bd3b7371632250a2fbc38bee6597b0aa189346a