[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt PATCH] tests: don't mix FILE* and UNIX FD I/O on same stream

On 9/21/20 12:36 PM, Daniel P. Berrangé wrote:
There is currently a hand in test27 that exhibits itself on FreeBSD 11.4


only. The behaviour is that virCommandProcessIO gets POLLIN on the
FD for stdout, but read() blocks. Meanwhile commandtest also blocks
in write for stderr because the pipe buffers are full.

This fix in commandhelper likely does not really address the root cause
just hides it due to the buffering done by FILE *. Mixing UNIX FD I/O
and FILE * I/O is bad practice regardles.


POSIX has rules for when it is safe (it has a notion of an active handle, and what must be done to a FILE* that is currently the active handle before doing further I/O via an fd that wants to become the active handle https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05). But you're right that not mixing is the easiest approach.

Signed-off-by: Daniel P. Berrangé <berrange redhat com>
  tests/commandhelper.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

With typos fixed,
Reviewed-by: Eric Blake <eblake redhat com>

Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]