mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 09:34:19 +00:00
Give the condition waits proper conditions
This commit is contained in:
parent
007e632530
commit
8cbff50461
|
@ -61,6 +61,7 @@ void CGraphicsBackend_Threaded::ThreadFunc(void *pUser)
|
|||
auto *pSelf = (CGraphicsBackend_Threaded *)pUser;
|
||||
std::unique_lock<std::mutex> Lock(pSelf->m_BufferSwapMutex);
|
||||
// notify, that the thread started
|
||||
pSelf->m_Started = true;
|
||||
pSelf->m_BufferDoneCond.notify_all();
|
||||
while(!pSelf->m_Shutdown)
|
||||
{
|
||||
|
@ -75,13 +76,14 @@ void CGraphicsBackend_Threaded::ThreadFunc(void *pUser)
|
|||
pSelf->m_pBuffer = nullptr;
|
||||
pSelf->m_BufferInProcess.store(false, std::memory_order_relaxed);
|
||||
pSelf->m_BufferDoneCond.notify_all();
|
||||
}
|
||||
|
||||
#if defined(CONF_VIDEORECORDER)
|
||||
if(IVideo::Current())
|
||||
IVideo::Current()->NextVideoFrameThread();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CGraphicsBackend_Threaded::CGraphicsBackend_Threaded()
|
||||
{
|
||||
|
@ -97,7 +99,7 @@ void CGraphicsBackend_Threaded::StartProcessor(ICommandProcessor *pProcessor)
|
|||
std::unique_lock<std::mutex> Lock(m_BufferSwapMutex);
|
||||
m_Thread = thread_init(ThreadFunc, this, "Graphics thread");
|
||||
// wait for the thread to start
|
||||
m_BufferDoneCond.wait(Lock);
|
||||
m_BufferDoneCond.wait(Lock, [this]() -> bool { return m_Started; });
|
||||
}
|
||||
|
||||
void CGraphicsBackend_Threaded::StopProcessor()
|
||||
|
@ -127,7 +129,7 @@ bool CGraphicsBackend_Threaded::IsIdle() const
|
|||
void CGraphicsBackend_Threaded::WaitForIdle()
|
||||
{
|
||||
std::unique_lock<std::mutex> Lock(m_BufferSwapMutex);
|
||||
if(m_pBuffer != nullptr)
|
||||
while(m_pBuffer != nullptr)
|
||||
m_BufferDoneCond.wait(Lock);
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,7 @@ private:
|
|||
std::condition_variable m_BufferDoneCond;
|
||||
CCommandBuffer *m_pBuffer;
|
||||
std::atomic_bool m_Shutdown;
|
||||
bool m_Started = false;
|
||||
std::atomic_bool m_BufferInProcess;
|
||||
void *m_Thread;
|
||||
|
||||
|
|
Loading…
Reference in a new issue