From aea81320015130bf850242d5a8695fcdcbf4f0c1 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 24 Jun 2025 15:23:48 +0200 Subject: [PATCH] buffer: don't use crazy listener::emit() --- src/protocols/types/Buffer.cpp | 11 ++++++++--- src/protocols/types/Buffer.hpp | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/protocols/types/Buffer.cpp b/src/protocols/types/Buffer.cpp index 179a1b0e8..6608d6311 100644 --- a/src/protocols/types/Buffer.cpp +++ b/src/protocols/types/Buffer.cpp @@ -29,12 +29,17 @@ bool IHLBuffer::locked() { void IHLBuffer::onBackendRelease(const std::function& fn) { if (m_hlEvents.backendRelease) { - m_hlEvents.backendRelease->emit(nullptr); + if (m_backendReleaseQueuedFn) + m_backendReleaseQueuedFn(); Debug::log(LOG, "backendRelease emitted early"); } - m_hlEvents.backendRelease = events.backendRelease.registerListener([this, fn](std::any) { - fn(); + m_backendReleaseQueuedFn = fn; + + m_hlEvents.backendRelease = events.backendRelease.registerListener([this](std::any) { + if (m_backendReleaseQueuedFn) + m_backendReleaseQueuedFn(); + m_backendReleaseQueuedFn = nullptr; m_hlEvents.backendRelease.reset(); }); } diff --git a/src/protocols/types/Buffer.hpp b/src/protocols/types/Buffer.hpp index 692cb97c0..f5c1d8482 100644 --- a/src/protocols/types/Buffer.hpp +++ b/src/protocols/types/Buffer.hpp @@ -37,7 +37,9 @@ class IHLBuffer : public Aquamarine::IBuffer { } m_hlEvents; private: - int m_locks = 0; + int m_locks = 0; + + std::function m_backendReleaseQueuedFn; friend class CHLBufferReference; };