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 :|


Reply via email to