From 342c7da4bd2c60796d722970f82300b6d5ba0b42 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 21 Dec 2023 10:39:10 +0800 Subject: [PATCH] fix(channel): use os_write() instead of fwrite() for stderr (#26689) This handles EAGAIN. Related #26688 --- src/nvim/channel.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/nvim/channel.c b/src/nvim/channel.c index 8c4fa8f5ad..e62c240636 100644 --- a/src/nvim/channel.c +++ b/src/nvim/channel.c @@ -30,6 +30,7 @@ #include "nvim/message.h" #include "nvim/msgpack_rpc/channel.h" #include "nvim/msgpack_rpc/server.h" +#include "nvim/os/fs.h" #include "nvim/os/os_defs.h" #include "nvim/os/shell.h" #include "nvim/path.h" @@ -574,7 +575,10 @@ size_t channel_send(uint64_t id, char *data, size_t len, bool data_owned, const goto retfree; } // unbuffered write - written = len * fwrite(data, len, 1, stderr); + ptrdiff_t wres = os_write(STDERR_FILENO, data, len, false); + if (wres >= 0) { + written = (size_t)wres; + } goto retfree; }