diff --git a/src/protocols/types/Buffer.cpp b/src/protocols/types/Buffer.cpp index 179a1b0e..6608d631 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 692cb97c..f5c1d848 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; };