https://github.com/videolan/vlc
Revision 90e98b012e31f99548f2d5454cfde18e9d688e57 authored by Thomas Guillem on 15 March 2023, 10:44:11 UTC, committed by Thomas Guillem on 17 March 2023, 08:10:38 UTC
`restrict` tells the compiler that the tombstone pointer is the only way
to access the variable pointed by it. This is not case with multi-threading.

From the C11 specs:

§ 6.7.3 item 8
    An object that is accessed through a restrict-qualified pointer has
    a special association with that pointer. This association, defined
    in 6.7.3.1 below, requires that all accesses to that object use,
    directly or indirectly, the value of that particular pointer.

§ 6.7.3.1 item 4
    Every other lvalue used to access the value of X shall also have its
    address based on P.

Also set the pointer to const.

Fixes the following race condition when closing live555:

Thread 80 (Thread 28393.4880):
0  0x0000007953dbebbc in syscall () from /home/tom/work/git/libvlcjni/libvlc/.gdb/obj/local/arm64-v8a/system/lib64/libc.so
1  0x0000007855d2c0ec in sys_futex (addr=0x89, op=137, val=0, to=0x0, addr2=0x0, val3=-1) at ../../src/linux/thread.c:82
2  vlc_futex_wait (addr=0x89, flags=0, val=0, to=0x0) at ../../src/linux/thread.c:93
3  vlc_atomic_wait (addr=0x89, val=0) at ../../src/linux/thread.c:109
4  0x0000007855d20e9c in vlc_cond_wait (cond=cond@entry=0x7829f26ce8, mutex=mutex@entry=0x7829f26cd8) at ../../src/misc/threads.c:298
5  0x0000007855d42244 in vlc_queue_Wait (q=0x7829f26cc0) at ../../include/vlc_queue.h:122
6  vlc_queue_DequeueKillable (q=0x7829f26cc0, tombstone=0x7829f26d00) at ../../include/vlc_queue.h:248
7  vlc_stream_fifo_Block (s=<optimized out>, eof=0x78709a8838) at ../../src/input/stream_fifo.c:75
8  0x0000007855cfa160 in vlc_stream_ReadRaw (s=s@entry=0x7819411360, buf=buf@entry=0x78c4393c80, len=len@entry=188) at ../../src/input/stream.c:466
9  0x0000007855cf9fe0 in vlc_stream_ReadPartial (s=s@entry=0x7819411360, buf=buf@entry=0x78c4393c80, len=len@entry=188) at ../../src/input/stream.c:489
10 0x0000007855cfad44 in vlc_stream_Read (s=<optimized out>, buf=0x78c4393c80, len=188) at ../../src/input/stream.c:504
11 vlc_stream_Block (s=0x7819411360, size=<optimized out>) at ../../src/input/stream.c:909
12 0x0000007855f1fe5c in ReadTSPacket (p_demux=p_demux@entry=0x78c42c0ce0) at ../../modules/demux/mpeg/ts.c:1808
13 0x0000007855f1de30 in Demux (p_demux=<optimized out>) at ../../modules/demux/mpeg/ts.c:649
4 0x0000007855d41e4c in vlc_demux_chained_Thread (data=0x7829f26c70) at ../../src/input/demux_chained.c:96
15 0x0000007855d2d5b8 in joinable_thread (data=0x7823341ea0) at ../../src/android/thread.c:96
16 0x0000007953e217c4 in __pthread_start(void*) () from /home/tom/work/git/libvlcjni/libvlc/.gdb/obj/local/arm64-v8a/system/lib64/libc.so
17 0x0000007953dc41ac in __start_thread () from /home/tom/work/git/libvlcjni/libvlc/.gdb/obj/local/arm64-v8a/system/lib64/libc.so

Thread 79 (Thread 28393.4875):
0  0x0000007953dbebbc in syscall () from /home/tom/work/git/libvlcjni/libvlc/.gdb/obj/local/arm64-v8a/system/lib64/libc.so
1  0x0000007953e21d98 in pthread_join () from /home/tom/work/git/libvlcjni/libvlc/.gdb/obj/local/arm64-v8a/system/lib64/libc.so
2  0x0000007855d2d204 in vlc_join (handle=0x7823341ea0, result=0x0) at ../../src/android/thread.c:147
3  0x0000007855d4202c in vlc_demux_chained_Delete (dc=0x7829f26c70) at ../../src/input/demux_chained.c:167
4  0x0000007855d3d92c in Close (p_this=<optimized out>) at ../../modules/access/live555.cpp:505
5  0x0000007855cb49dc in module_unneed (obj=obj@entry=0x78194110c0, module=0x78c83b0520) at ../../src/modules/modules.c:305
6  0x0000007855ceae78 in vlc_access_Destroy (access=0x78194110c0) at ../../src/input/access.c:54
7  0x0000007855cf958c in vlc_stream_Delete (s=0x78194110c0) at ../../src/input/stream.c:150
8  0x0000007855ce4954 in demux_Delete (demux=0x78709a8d60) at ../../include/vlc_demux.h:291
9  InputSourceDestroy (in=0x781a3aa780) at ../../src/input/input.c:2852
10 0x0000007855ce39f0 in End (p_input=p_input@entry=0x7863073c00) at ../../src/input/input.c:1413
11 0x0000007855ce0620 in Run (data=0x7863073c00) at ../../src/input/input.c:431
12 0x0000007855d2d5b8 in joinable_thread (data=0x78231b02c0) at ../../src/android/thread.c:96
13 0x0000007953e217c4 in __pthread_start(void*) () from /home/tom/work/git/libvlcjni/libvlc/.gdb/obj/local/arm64-v8a/system/lib64/libc.so
14 0x0000007953dc41ac in __start_thread () from /home/tom/work/git/libvlcjni/libvlc/.gdb/obj/local/arm64-v8a/system/lib64/libc.so
1 parent bdc6edb
History
Tip revision: 90e98b012e31f99548f2d5454cfde18e9d688e57 authored by Thomas Guillem on 15 March 2023, 10:44:11 UTC
vlc_queue: fix restrict violation
Tip revision: 90e98b0
File Mode Size
autotools
bin
buildsystem
compat
contrib
doc
extras
include
lib
m4
modules
po
share
src
test
.gitignore -rw-r--r-- 471 bytes
.mailmap -rw-r--r-- 7.1 KB
AUTHORS -rw-r--r-- 18.7 KB
COPYING -rw-r--r-- 17.7 KB
COPYING.LIB -rw-r--r-- 25.9 KB
INSTALL -rw-r--r-- 1.4 KB
Makefile.am -rw-r--r-- 6.5 KB
NEWS -rw-r--r-- 202.7 KB
README.md -rw-r--r-- 5.6 KB
THANKS -rw-r--r-- 5.5 KB
bootstrap -rwxr-xr-x 1.8 KB
config.h.meson -rw-r--r-- 15.0 KB
configure.ac -rw-r--r-- 140.3 KB
make-alias -rwxr-xr-x 299 bytes
meson.build -rw-r--r-- 32.2 KB
meson_options.txt -rw-r--r-- 14.3 KB

README.md

back to top