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/shell_manager.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/shell_manager.cc')
| -rw-r--r-- | src/shell_manager.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/shell_manager.cc b/src/shell_manager.cc index c39afadd..b683ac55 100644 --- a/src/shell_manager.cc +++ b/src/shell_manager.cc @@ -167,7 +167,7 @@ Vector<String> generate_env(StringView cmdline, const Context& context, const Sh FDWatcher make_pipe_reader(Pipe& pipe, String& contents) { - return {pipe.read_fd(), FdEvents::Read, + return {pipe.read_fd(), FdEvents::Read, EventMode::Urgent, [&contents, &pipe](FDWatcher& watcher, FdEvents, EventMode) { char buffer[1024]; while (fd_readable(pipe.read_fd())) @@ -188,7 +188,7 @@ FDWatcher make_pipe_writer(Pipe& pipe, StringView contents) { int flags = fcntl(pipe.write_fd(), F_GETFL, 0); fcntl(pipe.write_fd(), F_SETFL, flags | O_NONBLOCK); - return {pipe.write_fd(), FdEvents::Write, + return {pipe.write_fd(), FdEvents::Write, EventMode::Urgent, [contents, &pipe](FDWatcher& watcher, FdEvents, EventMode) mutable { while (fd_writable(pipe.write_fd())) { |
