summaryrefslogtreecommitdiff
path: root/src/remote.cc
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/remote.cc
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/remote.cc')
-rw-r--r--src/remote.cc8
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)