From 5370f3fa04336d1f9b85a11bfd0d0742db24bd2b Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Thu, 30 Dec 2010 22:19:36 +0000 Subject: [PATCH] Make ThreadedFrameSource never lock jobMutex and fileMutex at the same time. Moderately improves responsiveness of the audio display while video is loaded. Originally committed to SVN as r5070. --- aegisub/src/threaded_frame_source.cpp | 14 ++++++++------ aegisub/src/threaded_frame_source.h | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/aegisub/src/threaded_frame_source.cpp b/aegisub/src/threaded_frame_source.cpp index 437def4cf..78ba6833b 100644 --- a/aegisub/src/threaded_frame_source.cpp +++ b/aegisub/src/threaded_frame_source.cpp @@ -125,6 +125,7 @@ void *ThreadedFrameSource::Entry() { while (!TestDestroy() && run) { double time; int frameNum; + std::auto_ptr newSubs; { wxMutexLocker jobLocker(jobMutex); @@ -133,15 +134,16 @@ void *ThreadedFrameSource::Entry() { continue; } - if (nextSubs.get()) { - wxMutexLocker fileLocker(fileMutex); - subs = nextSubs; - singleFrame = -1; - } - time = nextTime; frameNum = nextFrame; nextTime = -1.; + newSubs = nextSubs; + } + + if (newSubs.get()) { + wxMutexLocker fileLocker(fileMutex); + subs = newSubs; + singleFrame = -1; } try { diff --git a/aegisub/src/threaded_frame_source.h b/aegisub/src/threaded_frame_source.h index 6545eadb8..c4cee7f7d 100644 --- a/aegisub/src/threaded_frame_source.h +++ b/aegisub/src/threaded_frame_source.h @@ -69,8 +69,8 @@ class ThreadedFrameSource : public wxThread { /// it was last sent to the subtitle provider int singleFrame; - wxMutex fileMutex; ///< Mutex for subtitle file usage - wxMutex jobMutex; ///< Mutex for nextFrame/nextTime + wxMutex fileMutex; ///< Mutex for subs and singleFrame + wxMutex jobMutex; ///< Mutex for nextFrame, nextTime and nextSubs wxMutex providerMutex; ///< Mutex for video provider wxMutex evtMutex; ///< Mutex for FrameReadyEvents associated with this