summaryrefslogtreecommitdiff
path: root/src/shell_manager.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/shell_manager.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/shell_manager.cc')
-rw-r--r--src/shell_manager.cc4
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()))
{