diff --git a/shared/source/os_interface/linux/drm_gem_close_worker.cpp b/shared/source/os_interface/linux/drm_gem_close_worker.cpp index e17fd67f19..fd6dfb644c 100644 --- a/shared/source/os_interface/linux/drm_gem_close_worker.cpp +++ b/shared/source/os_interface/linux/drm_gem_close_worker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2021 Intel Corporation + * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -66,16 +66,23 @@ inline void DrmGemCloseWorker::close(BufferObject *bo) { workCount--; } +inline void DrmGemCloseWorker::processQueue(std::queue &inputQueue) { + BufferObject *workItem = nullptr; + while (!inputQueue.empty()) { + workItem = inputQueue.front(); + inputQueue.pop(); + close(workItem); + } +} + void *DrmGemCloseWorker::worker(void *arg) { DrmGemCloseWorker *self = reinterpret_cast(arg); - BufferObject *workItem = nullptr; std::queue localQueue; std::unique_lock lock(self->closeWorkerMutex); lock.unlock(); while (self->active) { lock.lock(); - workItem = nullptr; while (self->queue.empty() && self->active) { self->condition.wait(lock); @@ -86,19 +93,11 @@ void *DrmGemCloseWorker::worker(void *arg) { } lock.unlock(); - while (!localQueue.empty()) { - workItem = localQueue.front(); - localQueue.pop(); - self->close(workItem); - } + self->processQueue(localQueue); } lock.lock(); - while (!self->queue.empty()) { - workItem = self->queue.front(); - self->queue.pop(); - self->close(workItem); - } + self->processQueue(self->queue); lock.unlock(); self->workerDone.store(true); diff --git a/shared/source/os_interface/linux/drm_gem_close_worker.h b/shared/source/os_interface/linux/drm_gem_close_worker.h index 804d79e24d..77cba0c4f2 100644 --- a/shared/source/os_interface/linux/drm_gem_close_worker.h +++ b/shared/source/os_interface/linux/drm_gem_close_worker.h @@ -40,6 +40,7 @@ class DrmGemCloseWorker { protected: void close(BufferObject *workItem); void closeThread(); + void processQueue(std::queue &inputQueue); static void *worker(void *arg); std::atomic active{true};