On Thu, Oct 15, 2026 at 03:58:25AM +0200, Filip Hejsek wrote: > A channel closes its fd when the last reference to it is dropped. > Closing stdio fds is typically unwanted, so warn when they are passed to > qio_channel_file_new_fd(). > > Signed-off-by: Filip Hejsek <[email protected]> > --- > io/channel-file.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/io/channel-file.c b/io/channel-file.c > index 5cef75a67c..4c9da6619b 100644 > --- a/io/channel-file.c > +++ b/io/channel-file.c > @@ -23,6 +23,7 @@ > #include "io/channel-util.h" > #include "io/channel-watch.h" > #include "qapi/error.h" > +#include "qemu/error-report.h" > #include "qemu/module.h" > #include "qemu/sockets.h" > #include "trace.h" > @@ -32,6 +33,11 @@ qio_channel_file_new_fd(int fd) > { > QIOChannelFile *ioc; > > + if (fd <= STDERR_FILENO) { > + warn_report("potential bug: creating a channel from stdio fd %d; " > + "the fd will be closed when the channel is destroyed", > fd); > + } > + > ioc = QIO_CHANNEL_FILE(object_new(TYPE_QIO_CHANNEL_FILE)); > > ioc->fd = fd;
Can we also update the API docs for qio_channel_file_new_fd, to say @fd must not point to stdin/stdout/stderr, since the FD will be closed by the channel on destruction. If requiring a channel to wrap stdio, use qio_channel_file_new_dupfd() instead. With regards, Daniel -- |: https://berrange.com ~~ https://hachyderm.io/@berrange :| |: https://libvirt.org ~~ https://entangle-photo.org :| |: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|
