mirror of https://github.com/mpv-player/mpv
197f18402e
This is a deadlock caused by a lock order issue: sub/osd.c locks the OSD first, then the subtitle decoder lock. player/sub.c does the reverse. Fix this by discussing away the requirement for locking (see below), which allows us to drop the broken sub lock. sub_get_text() still acquires and releases the sub decoder lock, but it's not held at the same time as the OSD lock anymore, so it should be fine. Originally, the sub lock was acquired because sub_get_text() returns a pointer to a mutable string. We simply declare that it's ok to call it unlocked, as long as only 1 thread accesses it, which works out fine in this case. |
||
---|---|---|
.. | ||
ass_mp.c | ||
ass_mp.h | ||
dec_sub.c | ||
dec_sub.h | ||
draw_bmp.c | ||
draw_bmp.h | ||
find_subfiles.c | ||
find_subfiles.h | ||
img_convert.c | ||
img_convert.h | ||
osd.c | ||
osd.h | ||
osd_dummy.c | ||
osd_font.otf | ||
osd_libass.c | ||
osd_state.h | ||
sd.h | ||
sd_ass.c | ||
sd_lavc.c | ||
sd_lavc_conv.c | ||
sd_lavf_srt.c | ||
sd_microdvd.c | ||
sd_movtext.c | ||
sd_srt.c |