diff options
| author | Maxime Coste <mawww@kakoune.org> | 2021-03-11 09:02:02 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2021-03-11 09:02:02 +1100 |
| commit | 4a59018dcd766b1499d53e82ba938ce39013f7af (patch) | |
| tree | 3440e440ca210fbd6eb7d56d724af4b6144ffa4a /src/remote.cc | |
| parent | c12d1c16b789e92da8a1f087836ac75951db0a93 (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/remote.cc')
| -rw-r--r-- | src/remote.cc | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/remote.cc b/src/remote.cc index 0cafd763..1b02251e 100644 --- a/src/remote.cc +++ b/src/remote.cc @@ -461,7 +461,7 @@ static bool send_data(int fd, RemoteBuffer& buffer, Optional<int> ancillary_fd = } RemoteUI::RemoteUI(int socket, DisplayCoord dimensions) - : m_socket_watcher(socket, FdEvents::Read | FdEvents::Write, + : m_socket_watcher(socket, FdEvents::Read | FdEvents::Write, EventMode::Urgent, [this](FDWatcher& watcher, FdEvents events, EventMode) { const int sock = watcher.fd(); try @@ -663,7 +663,7 @@ RemoteClient::RemoteClient(StringView session, StringView name, std::unique_ptr< m_socket_watcher->events() |= FdEvents::Write; }); - m_socket_watcher.reset(new FDWatcher{sock, FdEvents::Read | FdEvents::Write, + m_socket_watcher.reset(new FDWatcher{sock, FdEvents::Read | FdEvents::Write, EventMode::Urgent, [this, reader = MsgReader{}](FDWatcher& watcher, FdEvents events, EventMode) mutable { const int sock = watcher.fd(); if (events & FdEvents::Write and send_data(sock, m_send_buffer)) @@ -777,7 +777,7 @@ class Server::Accepter { public: Accepter(int socket) - : m_socket_watcher(socket, FdEvents::Read, + : m_socket_watcher(socket, FdEvents::Read, EventMode::Urgent, [this](FDWatcher&, FdEvents, EventMode mode) { handle_available_input(mode); }) @@ -888,7 +888,7 @@ Server::Server(String session_name, bool is_daemon) m_accepters.emplace_back(new Accepter{sock}); }; - m_listener.reset(new FDWatcher{listen_sock, FdEvents::Read, accepter}); + m_listener.reset(new FDWatcher{listen_sock, FdEvents::Read, EventMode::Urgent, accepter}); } bool Server::rename_session(StringView name) |
