diff options
| author | Vaxry <vaxry@vaxry.net> | 2025-06-24 15:23:48 +0200 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2025-06-24 15:23:53 +0200 |
| commit | aea81320015130bf850242d5a8695fcdcbf4f0c1 (patch) | |
| tree | 2a5e998ee87d4865e22dc8fe13eb69fdf29a0fd5 /src/protocols | |
| parent | cf7e3aa448f8c9e0d9e8f407e6ed730da55acc69 (diff) | |
buffer: don't use crazy listener::emit()
Diffstat (limited to 'src/protocols')
| -rw-r--r-- | src/protocols/types/Buffer.cpp | 11 | ||||
| -rw-r--r-- | 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 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<void()>& 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<void()> m_backendReleaseQueuedFn; friend class CHLBufferReference; }; |
