summaryrefslogtreecommitdiff
path: root/src/protocols
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-06-24 15:23:48 +0200
committerVaxry <vaxry@vaxry.net>2025-06-24 15:23:53 +0200
commitaea81320015130bf850242d5a8695fcdcbf4f0c1 (patch)
tree2a5e998ee87d4865e22dc8fe13eb69fdf29a0fd5 /src/protocols
parentcf7e3aa448f8c9e0d9e8f407e6ed730da55acc69 (diff)
buffer: don't use crazy listener::emit()
Diffstat (limited to 'src/protocols')
-rw-r--r--src/protocols/types/Buffer.cpp11
-rw-r--r--src/protocols/types/Buffer.hpp4
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;
};