From ff7f105c85287c413993c4ea43a556c90e6d7dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= Date: Sat, 11 Nov 2023 01:39:59 +0100 Subject: [PATCH] vo_gpu_next: guard from cache save conflict If multiple instances of mpv are closed at the same time, they will write to the same temporary file. Fix that by using unique temporary file. --- video/out/vo_gpu_next.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/video/out/vo_gpu_next.c b/video/out/vo_gpu_next.c index 37625bb5dd..c59ea8a014 100644 --- a/video/out/vo_gpu_next.c +++ b/video/out/vo_gpu_next.c @@ -1557,10 +1557,15 @@ static void save_cache_files(struct priv *p) if (!target_file) continue; - char *tmp = talloc_asprintf(ta_ctx, "%s~", target_file); - FILE *cache = fopen(tmp, "wb"); - if (!cache) + char *tmp = talloc_asprintf(ta_ctx, "%sXXXXXX", target_file); + int fd = mkstemp(tmp); + if (fd < 0) continue; + FILE *cache = fdopen(fd, "wb"); + if (!cache) { + close(fd); + continue; + } int ret = pl_cache_save_file(target_cache, cache); if (same_cache) ret += pl_cache_save_file(p->icc_cache, cache);