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#tag_15_05). But you're right that not mixing is the easiest approach.


Signed-off-by: Daniel P. BerrangĂ© <[email protected]>
---
  tests/commandhelper.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

With typos fixed,
Reviewed-by: Eric Blake <[email protected]>

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

Reply via email to