From d566da586b0de3886eba9c69e2826cef5e0c5041 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 24 Jan 2016 09:35:45 +0100 Subject: Fix deadlock if a closeEvent was being processed in the event queue while clearing due to a chunk size change. --- src/audiocacheeventhandler.cc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/audiocacheeventhandler.cc b/src/audiocacheeventhandler.cc index 40e339d..001f6b5 100644 --- a/src/audiocacheeventhandler.cc +++ b/src/audiocacheeventhandler.cc @@ -202,7 +202,7 @@ void AudioCacheEventHandler::clearEvents() { if(event.eventType == EventType::Close) { - handleCloseEvent(event); + handleCloseCache(event.id); // This method does not lock. } } @@ -216,17 +216,15 @@ void AudioCacheEventHandler::handleLoadNextEvent(CacheEvent& event) void AudioCacheEventHandler::handleCloseEvent(CacheEvent& e) { + std::lock_guard lock(mutex); handleCloseCache(e.id); } void AudioCacheEventHandler::handleCloseCache(cacheid_t cacheid) { auto& cache = idManager.getCache(cacheid); - { - std::lock_guard lock(mutex); - files.releaseFile(cache.afile->getFilename()); - } + files.releaseFile(cache.afile->getFilename()); delete[] cache.front; delete[] cache.back; -- cgit v1.2.3