Revert "Deferred deletion of allocations in main thread"

This reverts commit 418e0f7322.

Signed-off-by: Compute-Runtime-Validation <compute-runtime-validation@intel.com>
This commit is contained in:
Compute-Runtime-Validation
2022-12-20 13:32:52 +01:00
committed by Compute-Runtime-Automation
parent 0e6cc86821
commit cac134028c
11 changed files with 13 additions and 144 deletions

View File

@@ -96,7 +96,7 @@ void *DeferredDeleter::run(void *arg) {
}
lock.unlock();
// Delete items placed into deferred delete queue
self->clearQueue(false);
self->clearQueue();
lock.lock();
// Check whether working thread should be stopped
} while (!self->shouldStop());
@@ -105,33 +105,21 @@ void *DeferredDeleter::run(void *arg) {
}
void DeferredDeleter::drain(bool blocking) {
clearQueue(false);
clearQueue();
if (blocking) {
while (!areElementsReleased())
;
}
}
void DeferredDeleter::clearQueueTillFirstFailure() {
if (numClients > 0) {
return;
}
clearQueue(true);
}
void DeferredDeleter::clearQueue(bool breakOnFailure) {
void DeferredDeleter::clearQueue() {
do {
auto deletion = queue.removeFrontOne();
if (deletion) {
if (deletion->apply()) {
elementsToRelease--;
} else {
if (breakOnFailure) {
queue.pushFrontOne(*deletion.release());
break;
} else {
queue.pushTailOne(*deletion.release());
}
queue.pushTailOne(*deletion.release());
}
}
} while (!queue.peekIsEmpty());

View File

@@ -31,13 +31,11 @@ class DeferredDeleter {
MOCKABLE_VIRTUAL void drain(bool blocking);
MOCKABLE_VIRTUAL void clearQueueTillFirstFailure();
protected:
void stop();
void safeStop();
void ensureThread();
MOCKABLE_VIRTUAL void clearQueue(bool breakOnFailure);
MOCKABLE_VIRTUAL void clearQueue();
MOCKABLE_VIRTUAL bool areElementsReleased();
MOCKABLE_VIRTUAL bool shouldStop();

View File

@@ -258,7 +258,7 @@ void MemoryManager::checkGpuUsageAndDestroyGraphicsAllocations(GraphicsAllocatio
if (gfxAllocation->isUsed()) {
if (gfxAllocation->isUsedByManyOsContexts()) {
multiContextResourceDestructor->deferDeletion(new DeferrableAllocationDeletion{*this, *gfxAllocation});
multiContextResourceDestructor->clearQueueTillFirstFailure();
multiContextResourceDestructor->drain(false);
return;
}
for (auto &engine : getRegisteredEngines()) {