summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorShreesh Adiga <16567adigashreesh@gmail.com>2021-07-11 18:13:04 +0530
committerDudemanguy <random342@airmail.cc>2021-07-13 15:16:59 +0000
commit8ace8e879050fbfc7e11c68541dbadd6ce8b56a9 (patch)
treed15f2cc99e52f49cdbf35523d1f21e1050c3d680 /demux
parentbe81470f5464abcb31095f6c86380b354a16ba2d (diff)
downloadmpv-8ace8e879050fbfc7e11c68541dbadd6ce8b56a9.tar.bz2
mpv-8ace8e879050fbfc7e11c68541dbadd6ce8b56a9.tar.xz
demux: acquire lock before calling update_bytes_read
in->byte_level_seeks field is written and modified inside update_bytes_read at the same time when demux_get_reader_state is executing, which locks the demux thread mutex. This results in a data race, reported by Thread Sanitizer when playing mp3 file of sufficient long length.
Diffstat (limited to 'demux')
-rw-r--r--demux/demux.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 650078d068..fdec805d15 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -4137,10 +4137,10 @@ static void update_cache(struct demux_internal *in)
stream_control(stream, STREAM_CTRL_GET_METADATA, &stream_metadata);
}
- update_bytes_read(in);
-
pthread_mutex_lock(&in->lock);
+ update_bytes_read(in);
+
if (do_update)
in->stream_size = stream_size;
if (stream_metadata) {