Skip to content

Commit 7522787

Browse files
[SYCL] Allow unittests to use drainThreadPool method on Win (#8006)
Signed-off-by: Tikhomirova, Kseniya <[email protected]>
1 parent d145da8 commit 7522787

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

sycl/source/detail/global_handler.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ class ObjectUsageCounter {
5252
LockGuard Guard(GlobalHandler::MSyclGlobalHandlerProtector);
5353
GlobalHandler *RTGlobalObjHandler = GlobalHandler::getInstancePtr();
5454
if (RTGlobalObjHandler) {
55-
RTGlobalObjHandler->drainThreadPool();
56-
if (RTGlobalObjHandler->MScheduler.Inst)
57-
RTGlobalObjHandler->MScheduler.Inst->releaseResources();
55+
RTGlobalObjHandler->prepareSchedulerToRelease();
5856
}
5957
}
6058
}
@@ -93,7 +91,7 @@ void GlobalHandler::attachScheduler(Scheduler *Scheduler) {
9391
// The method is used in unit tests only. Do not protect with lock since
9492
// releaseResources will cause dead lock due to host queue release
9593
if (MScheduler.Inst)
96-
MScheduler.Inst->releaseResources();
94+
prepareSchedulerToRelease();
9795
MScheduler.Inst.reset(Scheduler);
9896
}
9997

@@ -201,11 +199,17 @@ void GlobalHandler::unloadPlugins() {
201199
getPlugins().clear();
202200
}
203201

204-
void GlobalHandler::drainThreadPool() {
202+
void GlobalHandler::prepareSchedulerToRelease() {
205203
#ifndef _WIN32
204+
drainThreadPool();
205+
if (MScheduler.Inst)
206+
MScheduler.Inst->releaseResources();
207+
#endif
208+
}
209+
210+
void GlobalHandler::drainThreadPool() {
206211
if (MHostTaskThreadPool.Inst)
207212
MHostTaskThreadPool.Inst->drain();
208-
#endif
209213
}
210214

211215
void shutdown() {
@@ -216,9 +220,7 @@ void shutdown() {
216220

217221
// Ensure neither host task is working so that no default context is accessed
218222
// upon its release
219-
Handler->drainThreadPool();
220-
if (Handler->MScheduler.Inst)
221-
Handler->MScheduler.Inst->releaseResources();
223+
Handler->prepareSchedulerToRelease();
222224

223225
if (Handler->MHostTaskThreadPool.Inst)
224226
Handler->MHostTaskThreadPool.Inst->finishAndWait();

sycl/source/detail/global_handler.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class GlobalHandler {
7777
void unloadPlugins();
7878
void releaseDefaultContexts();
7979
void drainThreadPool();
80+
void prepareSchedulerToRelease();
8081

8182
// For testing purposes only
8283
void attachScheduler(Scheduler *Scheduler);

sycl/source/detail/scheduler/scheduler.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,6 @@ Scheduler::Scheduler() {
392392
Scheduler::~Scheduler() { DefaultHostQueue.reset(); }
393393

394394
void Scheduler::releaseResources() {
395-
#ifndef _WIN32
396395
// There might be some commands scheduled for post enqueue cleanup that
397396
// haven't been freed because of the graph mutex being locked at the time,
398397
// clean them up now.
@@ -408,7 +407,6 @@ void Scheduler::releaseResources() {
408407
// added to deferred mem obj storage. So we may end up with leak.
409408
while (!isDeferredMemObjectsEmpty())
410409
cleanupDeferredMemObjects(BlockingT::BLOCKING);
411-
#endif
412410
}
413411

414412
MemObjRecord *Scheduler::getMemObjRecord(const Requirement *const Req) {

0 commit comments

Comments
 (0)