summaryrefslogtreecommitdiff
path: root/src/managers/eventLoop
diff options
context:
space:
mode:
authorTom Englund <tomenglund26@gmail.com>2025-07-03 21:20:46 +0200
committerVaxry <43317083+vaxerski@users.noreply.github.com>2025-07-07 18:09:34 +0200
commit4a30e2acd9bb6d871d547f929cefce1d47c08931 (patch)
tree5b43474bea5f97a3852461c57521dd18a489b3f9 /src/managers/eventLoop
parentceec1943ffad717ff99cd72c60922738e318a445 (diff)
eventloop: RAII the even source on readable fd
RAII remove the event source and honor rule by 5
Diffstat (limited to 'src/managers/eventLoop')
-rw-r--r--src/managers/eventLoop/EventLoopManager.cpp5
-rw-r--r--src/managers/eventLoop/EventLoopManager.hpp17
2 files changed, 17 insertions, 5 deletions
diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp
index 6233a2d0..5b2e09d1 100644
--- a/src/managers/eventLoop/EventLoopManager.cpp
+++ b/src/managers/eventLoop/EventLoopManager.cpp
@@ -77,11 +77,6 @@ void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) {
UP<SReadableWaiter> taken = std::move(*it);
m_readableWaiters.erase(it);
- if (taken->source) {
- wl_event_source_remove(taken->source);
- taken->source = nullptr;
- }
-
if (taken->fn)
taken->fn();
}
diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp
index 977d2b01..0835b242 100644
--- a/src/managers/eventLoop/EventLoopManager.hpp
+++ b/src/managers/eventLoop/EventLoopManager.hpp
@@ -42,6 +42,23 @@ class CEventLoopManager {
wl_event_source* source;
Hyprutils::OS::CFileDescriptor fd;
std::function<void()> fn;
+
+ SReadableWaiter(wl_event_source* src, Hyprutils::OS::CFileDescriptor f, std::function<void()> func) : source(src), fd(std::move(f)), fn(std::move(func)) {}
+
+ ~SReadableWaiter() {
+ if (source) {
+ wl_event_source_remove(source);
+ source = nullptr;
+ }
+ }
+
+ // copy
+ SReadableWaiter(const SReadableWaiter&) = delete;
+ SReadableWaiter& operator=(const SReadableWaiter&) = delete;
+
+ // move
+ SReadableWaiter(SReadableWaiter&& other) noexcept = default;
+ SReadableWaiter& operator=(SReadableWaiter&& other) noexcept = default;
};
// schedule function to when fd is readable (WL_EVENT_READABLE / POLLIN),