summaryrefslogtreecommitdiff
path: root/src/event_manager.hh
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2021-03-11 09:02:02 +1100
committerMaxime Coste <mawww@kakoune.org>2021-03-11 09:02:02 +1100
commit4a59018dcd766b1499d53e82ba938ce39013f7af (patch)
tree3440e440ca210fbd6eb7d56d724af4b6144ffa4a /src/event_manager.hh
parentc12d1c16b789e92da8a1f087836ac75951db0a93 (diff)
Do not select on non-urgent fd when handling only urgent events
This avoids 100% CPU usage when we have pending fifo input while running a shell process, as we will not end-up busy looping in pselect but not reading the available data due to being only processing urgent events.
Diffstat (limited to 'src/event_manager.hh')
-rw-r--r--src/event_manager.hh4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/event_manager.hh b/src/event_manager.hh
index 7503e64a..b7a9720f 100644
--- a/src/event_manager.hh
+++ b/src/event_manager.hh
@@ -34,7 +34,7 @@ class FDWatcher
{
public:
using Callback = std::function<void (FDWatcher& watcher, FdEvents events, EventMode mode)>;
- FDWatcher(int fd, FdEvents events, Callback callback);
+ FDWatcher(int fd, FdEvents events, EventMode mode, Callback callback);
FDWatcher(const FDWatcher&) = delete;
FDWatcher& operator=(const FDWatcher&) = delete;
~FDWatcher();
@@ -42,6 +42,7 @@ public:
int fd() const { return m_fd; }
FdEvents events() const { return m_events; }
FdEvents& events() { return m_events; }
+ EventMode mode() const { return m_mode; }
void run(FdEvents events, EventMode mode);
@@ -51,6 +52,7 @@ public:
private:
int m_fd;
FdEvents m_events;
+ EventMode m_mode;
Callback m_callback;
};