diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-07-14 10:20:57 +0200 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-07-14 10:20:57 +0200 |
commit | 17ee548bcd8d9111addcc291457ad316e620d5e6 (patch) | |
tree | 37d6dda4eebe35ee78d15a1b0958f76e67e6e2b5 /Libraries/LibCore/CEventLoop.h | |
parent | f1d6a37d5dca1593e78e39a33714730dc0348224 (diff) | |
download | serenity-17ee548bcd8d9111addcc291457ad316e620d5e6.zip |
CEventLoop: Add wake(), a mechanism for waking up when blocked in select().
This patch generalizes the concept used in Piano to wake up the event loop
so it can react to something happening on a secondary thread.
Basically, there's a pipe who is always part of the file descriptor set we
pass to select(), and calling wake() simply writes a little to that pipe.
Diffstat (limited to 'Libraries/LibCore/CEventLoop.h')
-rw-r--r-- | Libraries/LibCore/CEventLoop.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/Libraries/LibCore/CEventLoop.h b/Libraries/LibCore/CEventLoop.h index 7e3d5cb9e7..b404ef5c33 100644 --- a/Libraries/LibCore/CEventLoop.h +++ b/Libraries/LibCore/CEventLoop.h @@ -50,6 +50,8 @@ public: m_queued_events.append(move(other.m_queued_events)); } + static void wake(); + protected: virtual void add_file_descriptors_for_select(fd_set&, int& max_fd) { UNUSED_PARAM(max_fd); } virtual void process_file_descriptors_after_select(const fd_set&) {} @@ -69,6 +71,8 @@ private: bool m_exit_requested { false }; int m_exit_code { 0 }; + static int s_wake_pipe_fds[2]; + CLock m_lock; struct EventLoopTimer { |