From 3c931b11d6d5db63e9a2714202d12a0382dbb767 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 18 Sep 2023 12:10:30 +0400 Subject: [PATCH] Clear CacheHelper::waiting mutex in time. I hope this fixes crashes in streaming semaphore usage. CacheHelper::waiting points to Context::_semaphore, so it should be cleared before Context is destroyed, not later. --- .../media/streaming/media_streaming_reader.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Telegram/SourceFiles/media/streaming/media_streaming_reader.cpp b/Telegram/SourceFiles/media/streaming/media_streaming_reader.cpp index aa5841c53..95654e590 100644 --- a/Telegram/SourceFiles/media/streaming/media_streaming_reader.cpp +++ b/Telegram/SourceFiles/media/streaming/media_streaming_reader.cpp @@ -903,6 +903,10 @@ void Reader::stopStreaming(bool stillActive) { _stopStreamingAsync = false; _waiting.store(nullptr, std::memory_order_release); + if (_cacheHelper && _cacheHelper->waiting != nullptr) { + QMutexLocker lock(&_cacheHelper->mutex); + _cacheHelper->waiting.store(nullptr, std::memory_order_release); + } if (!stillActive) { _streamingActive = false; refreshLoaderPriority(); @@ -1379,10 +1383,6 @@ void Reader::finalizeCache() { return; } Assert(_cache != nullptr); - if (_cacheHelper->waiting != nullptr) { - QMutexLocker lock(&_cacheHelper->mutex); - _cacheHelper->waiting.store(nullptr, std::memory_order_release); - } auto toCache = _slices.unloadToCache(); while (toCache.number >= 0) { putToCache(std::move(toCache));