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
s/hand/hang/
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.
regardless
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...).
But you're right that not mixing is the easiest approach.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
tests/commandhelper.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
With typos fixed,
Reviewed-by: Eric Blake <eblake(a)redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization:
qemu.org |
libvirt.org