From 2deafdd3a7a2f053fb5c398c1bad66cb30bf44cf Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Tue, 1 May 2012 02:49:26 +0000 Subject: [PATCH] Fix race condition on shutdown that could result in the program not completely exiting on Windows Originally committed to SVN as r6729. --- aegisub/src/threaded_frame_source.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/aegisub/src/threaded_frame_source.cpp b/aegisub/src/threaded_frame_source.cpp index ffb1d6dc9..b303782ed 100644 --- a/aegisub/src/threaded_frame_source.cpp +++ b/aegisub/src/threaded_frame_source.cpp @@ -131,13 +131,16 @@ std::tr1::shared_ptr ThreadedFrameSource::ProcFrame(int frameNum } void *ThreadedFrameSource::Entry() { - while (!TestDestroy() && run) { + while (!TestDestroy()) { double time; int frameNum; std::auto_ptr newSubs; { wxMutexLocker jobLocker(jobMutex); + if (!run) + return EXIT_SUCCESS; + if (nextTime == -1.) { jobReady.Wait(); continue; @@ -191,9 +194,13 @@ ThreadedFrameSource::ThreadedFrameSource(wxString videoFileName, wxEvtHandler *p Create(); Run(); } + ThreadedFrameSource::~ThreadedFrameSource() { - run = false; - jobReady.Signal(); + { + wxMutexLocker locker(jobMutex); + run = false; + jobReady.Signal(); + } Wait(); }