summaryrefslogtreecommitdiffstats
path: root/sub/dec_sub.c
diff options
context:
space:
mode:
authornanahi <130121847+na-na-hi@users.noreply.github.com>2024-04-07 11:57:18 -0400
committerKacper Michajłow <kasper93@gmail.com>2024-04-17 23:42:35 +0200
commit715feea8d82a750c3d627ee10c4fd6c6fe1fbe86 (patch)
treec2163d1a05420d9dbeabd870eb1300026d145e9f /sub/dec_sub.c
parentdbe377645f11a5bd253e48df1ae69f960499fcd8 (diff)
downloadmpv-715feea8d82a750c3d627ee10c4fd6c6fe1fbe86.tar.bz2
mpv-715feea8d82a750c3d627ee10c4fd6c6fe1fbe86.tar.xz
dec_sub: fix locking for sub_ass_get_extradata
sub->sd can be destroyed and recreated when update_segment is called inside a lock. Fixes: f9918b53901db2fbc3cfc1be509a32d3ed89556a
Diffstat (limited to 'sub/dec_sub.c')
-rw-r--r--sub/dec_sub.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index a8746a27ed..1e316687d8 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -445,11 +445,14 @@ char *sub_get_text(struct dec_sub *sub, double pts, enum sd_text_type type)
char *sub_ass_get_extradata(struct dec_sub *sub)
{
+ mp_mutex_lock(&sub->lock);
if (strcmp(sub->sd->codec->codec, "ass") != 0)
return NULL;
char *extradata = sub->sd->codec->extradata;
int extradata_size = sub->sd->codec->extradata_size;
- return talloc_strndup(NULL, extradata, extradata_size);
+ char *data = talloc_strndup(NULL, extradata, extradata_size);
+ mp_mutex_unlock(&sub->lock);
+ return data;
}
struct sd_times sub_get_times(struct dec_sub *sub, double pts)