Fixed TaskSchduler not releasing memory and handles
Former-commit-id: 4bf70d2ffdaaaea6b8ee122bb4589b3d8c68884f
This commit is contained in:
parent
ca76c4dfb3
commit
0af23c11f5
|
|
@ -53,7 +53,8 @@ void NzTaskScheduler::SetWorkerCount(unsigned int workerCount)
|
|||
|
||||
void NzTaskScheduler::Uninitialize()
|
||||
{
|
||||
NzTaskSchedulerImpl::Uninitialize();
|
||||
if (NzTaskSchedulerImpl::IsInitialized())
|
||||
NzTaskSchedulerImpl::Uninitialize();
|
||||
}
|
||||
|
||||
void NzTaskScheduler::WaitForTasks()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue