Fixed TaskSchduler not releasing memory and handles

Former-commit-id: 4bf70d2ffdaaaea6b8ee122bb4589b3d8c68884f
This commit is contained in:
Lynix 2013-11-30 16:13:54 +01:00
parent ca76c4dfb3
commit 0af23c11f5
2 changed files with 15 additions and 1 deletions

View File

@ -53,7 +53,8 @@ void NzTaskScheduler::SetWorkerCount(unsigned int workerCount)
void NzTaskScheduler::Uninitialize()
{
NzTaskSchedulerImpl::Uninitialize();
if (NzTaskSchedulerImpl::IsInitialized())
NzTaskSchedulerImpl::Uninitialize();
}
void NzTaskScheduler::WaitForTasks()

View File

@ -102,7 +102,18 @@ void NzTaskSchedulerImpl::Uninitialize()
WaitForMultipleObjects(s_workerCount, &s_workerThreads[0], true, INFINITE);
for (unsigned int i = 0; i < s_workerCount; ++i)
{
Worker& worker = s_workers[i];
CloseHandle(s_doneEvents[i]);
CloseHandle(s_workerThreads[i]);
CloseHandle(worker.wakeEvent);
DeleteCriticalSection(&worker.queueMutex);
}
s_doneEvents.reset();
s_workers.reset();
s_workerThreads.reset();
s_workerCount = 0;
}
void NzTaskSchedulerImpl::WaitForTasks()
@ -197,6 +208,8 @@ unsigned int __stdcall NzTaskSchedulerImpl::WorkerProc(void* userdata)
}
}
SetEvent(s_doneEvents[workerID]); // Au cas où un thread attendrait sur WaitForTasks() pendant qu'un autre appellerait Uninitialize()
return 0;
}