From cc01216e1c86281212f2df418dc198624c93484b Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 25 Jun 2014 15:23:31 +0200 Subject: [PATCH] Fixed crash in TaskScheduler Windows implementation Also replaced CreateEventA calls by CreateEventW calls to avoid one level of function call. Thanks to bacelar Former-commit-id: 4612e3fb0af8eef9ffd947d8edf55e4f2fa27c9b --- src/Nazara/Core/Win32/TaskSchedulerImpl.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Nazara/Core/Win32/TaskSchedulerImpl.cpp b/src/Nazara/Core/Win32/TaskSchedulerImpl.cpp index c55d84202..09c3c1abd 100644 --- a/src/Nazara/Core/Win32/TaskSchedulerImpl.cpp +++ b/src/Nazara/Core/Win32/TaskSchedulerImpl.cpp @@ -34,11 +34,11 @@ bool NzTaskSchedulerImpl::Initialize(unsigned int workerCount) { Worker& worker = s_workers[i]; InitializeCriticalSection(&worker.queueMutex); - worker.wakeEvent = CreateEventA(nullptr, false, false, nullptr); + worker.wakeEvent = CreateEventW(nullptr, false, false, nullptr); worker.running = true; worker.workCount = 0; - s_doneEvents[i] = CreateEventA(nullptr, true, false, nullptr); + s_doneEvents[i] = CreateEventW(nullptr, true, false, nullptr); workerIDs[i] = i; s_workerThreads[i] = reinterpret_cast(_beginthreadex(nullptr, 0, &WorkerProc, &workerIDs[i], 0, nullptr)); @@ -149,7 +149,8 @@ NzFunctor* NzTaskSchedulerImpl::StealTask(unsigned int workerID) if (worker.workCount > 0) { - NzFunctor* task; + NzFunctor* task = nullptr; + if (TryEnterCriticalSection(&worker.queueMutex)) { if (!worker.queue.empty()) @@ -158,8 +159,6 @@ NzFunctor* NzTaskSchedulerImpl::StealTask(unsigned int workerID) worker.queue.pop(); worker.workCount = worker.queue.size(); } - else - task = nullptr; LeaveCriticalSection(&worker.queueMutex); }