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()
|
void NzTaskScheduler::Uninitialize()
|
||||||
{
|
{
|
||||||
NzTaskSchedulerImpl::Uninitialize();
|
if (NzTaskSchedulerImpl::IsInitialized())
|
||||||
|
NzTaskSchedulerImpl::Uninitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzTaskScheduler::WaitForTasks()
|
void NzTaskScheduler::WaitForTasks()
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,18 @@ void NzTaskSchedulerImpl::Uninitialize()
|
||||||
WaitForMultipleObjects(s_workerCount, &s_workerThreads[0], true, INFINITE);
|
WaitForMultipleObjects(s_workerCount, &s_workerThreads[0], true, INFINITE);
|
||||||
|
|
||||||
for (unsigned int i = 0; i < s_workerCount; ++i)
|
for (unsigned int i = 0; i < s_workerCount; ++i)
|
||||||
|
{
|
||||||
|
Worker& worker = s_workers[i];
|
||||||
|
CloseHandle(s_doneEvents[i]);
|
||||||
CloseHandle(s_workerThreads[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()
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue