From 507abdcbfb08ccebf89fe96f7d72101da2048914 Mon Sep 17 00:00:00 2001 From: jerry Date: Mon, 2 Jun 2014 16:07:58 +0000 Subject: [PATCH] issue #4072 Carbon loop not ready within 5 sec added lock to all condVar --- src/lib/base/EventQueue.cpp | 14 +++++++------- src/lib/platform/OSXScreen.cpp | 16 ++++++++-------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lib/base/EventQueue.cpp b/src/lib/base/EventQueue.cpp index 636f643e..ce3f8f7e 100644 --- a/src/lib/base/EventQueue.cpp +++ b/src/lib/base/EventQueue.cpp @@ -106,9 +106,11 @@ void CEventQueue::loop() { m_buffer->init(); - *m_readyCondVar = true; - m_readyCondVar->signal(); - + { + CLock lock(m_readyMutex); + *m_readyCondVar = true; + m_readyCondVar->signal(); + } LOG((CLOG_DEBUG "event queue is ready")); while (!m_pending.empty()) { LOG((CLOG_DEBUG "add pending events to buffer")); @@ -556,16 +558,14 @@ CEventQueue::getSystemTarget() void CEventQueue::waitForReady() const { - double timeout = ARCH->time() + 5; - m_readyCondVar->lock(); + double timeout = ARCH->time() + 10; + CLock lock(m_readyMutex); while (!m_readyCondVar->wait()) { if(ARCH->time() > timeout) { throw std::runtime_error("event queue is not ready within 5 sec"); } } - - m_readyCondVar->unlock(); } // diff --git a/src/lib/platform/OSXScreen.cpp b/src/lib/platform/OSXScreen.cpp index 0fa8a469..cf58aaa2 100644 --- a/src/lib/platform/OSXScreen.cpp +++ b/src/lib/platform/OSXScreen.cpp @@ -1701,9 +1701,12 @@ COSXScreen::watchSystemPowerThread(void*) m_events->waitForReady(); #if defined(MAC_OS_X_VERSION_10_7) - if (*m_carbonLoopReady == false) { - *m_carbonLoopReady = true; - m_carbonLoopReady->signal(); + { + CLock lockCarbon(m_carbonLoopMutex); + if (*m_carbonLoopReady == false) { + *m_carbonLoopReady = true; + m_carbonLoopReady->signal(); + } } #endif @@ -2123,16 +2126,13 @@ void COSXScreen::waitForCarbonLoop() const { #if defined(MAC_OS_X_VERSION_10_7) - double timeout = ARCH->time() + 5; - m_carbonLoopReady->lock(); - + double timeout = ARCH->time() + 10; + CLock lock(m_carbonLoopMutex); while (!m_carbonLoopReady->wait()) { if(ARCH->time() > timeout) { throw std::runtime_error("carbon loop is not ready within 5 sec"); } } - - m_carbonLoopReady->unlock(); #endif }