DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 366840c962104d9dd2ae3fda84fbede2399ea1dd
parent d2033dd45dd78c81b713279331a2d2da6e85a8aa
Author: falkTX <falktx@gmail.com>
Date:   Sat, 18 Oct 2014 21:58:02 +0100

Fix some NTK thread issues

Diffstat:
Mdgl/ntk/NtkApp.hpp | 28+++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/dgl/ntk/NtkApp.hpp b/dgl/ntk/NtkApp.hpp @@ -37,17 +37,19 @@ # undef override_defined #endif +// Is this really needed? +// fails on renoise struct ScopedDisplayLock { ScopedDisplayLock() { -#ifdef DISTRHO_OS_LINUX +#if 0 //def DISTRHO_OS_LINUX XLockDisplay(fl_display); #endif } ~ScopedDisplayLock() { -#ifdef DISTRHO_OS_LINUX +#if 0 //def DISTRHO_OS_LINUX XUnlockDisplay(fl_display); #endif } @@ -86,7 +88,7 @@ public: fWindowMutex(), fNextUI(), fDoNextUI(false), - fInitialized(false) + fThreadInitialized(false) { #ifdef DISTRHO_OS_LINUX //XInitThreads(); @@ -94,7 +96,7 @@ public: startThread(); - for (; ! fInitialized;) + for (; ! fThreadInitialized;) d_msleep(10); } @@ -158,8 +160,16 @@ public: fNextUI.func = (NextUI::UiFunc)func; fDoNextUI = true; - for (; fDoNextUI;) - d_msleep(10); + if (isThreadRunning() && ! shouldThreadExit()) + { + for (; fDoNextUI;) + d_msleep(10); + } + else + { + fNextUI.run(); + fDoNextUI = false; + } return fNextUI.ui; } @@ -176,7 +186,7 @@ public: fNextUI.ui = ui; fDoNextUI = true; - if (isThreadRunning()) + if (isThreadRunning() && ! shouldThreadExit()) { for (; fDoNextUI;) d_msleep(10); @@ -212,7 +222,7 @@ private: d_Mutex fWindowMutex; NextUI fNextUI; volatile bool fDoNextUI; - volatile bool fInitialized; + volatile bool fThreadInitialized; /** @internal used by NtkWindow. */ void addWindow(Fl_Double_Window* const window) @@ -252,7 +262,7 @@ private: #endif } - fInitialized = true; + fThreadInitialized = true; for (; ! shouldThreadExit();) {