diff --git a/modules/juce_opengl/opengl/juce_OpenGLContext.cpp b/modules/juce_opengl/opengl/juce_OpenGLContext.cpp index c1e421097c..2539712b84 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLContext.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLContext.cpp @@ -112,7 +112,14 @@ public: { // make sure everything has finished executing destroying.set (1); - execute (new DoNothingWorker(), true, true); + + if (workQueue.size() > 0) + { + if (! renderThread->contains (this)) + resume(); + + execute (new DoNothingWorker(), true, true); + } pause(); renderThread = nullptr; @@ -417,8 +424,10 @@ public: JobStatus runJob() override { { + MessageLockWorker worker (*this); + // Allow the message thread to finish setting-up the context before using it.. - MessageManagerLock mml (this); + MessageManagerLock mml (worker); if (! mml.lockWasGained()) return ThreadPoolJob::jobHasFinished; } @@ -579,6 +588,8 @@ public: OpenGLContext::AsyncWorker::Ptr worker = (blocker != nullptr ? blocker : static_cast (workerToUse)); workQueue.add (worker); + context.triggerRepaint(); + if (blocker != nullptr) blocker->block(); }