mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 06:50:22 +03:00
utils: Mark inpipe as non-blocking
Mark a virCommand's inpipe (write-end of pipe) as non-blocking so that it will never block when we were to try to write too many bytes to it while it doesn't have the capacity to hold them. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
8d2d8a6bea
commit
7f940d7497
@ -2538,6 +2538,19 @@ virCommandRunAsync(virCommandPtr cmd, pid_t *pid)
|
||||
}
|
||||
cmd->infd = infd[0];
|
||||
cmd->inpipe = infd[1];
|
||||
#if defined (F_SETFL)
|
||||
if (fcntl(cmd->inpipe, F_SETFL, O_NONBLOCK) < 0) {
|
||||
virReportSystemError(errno, "%s",
|
||||
_("fcntl failed to set O_NONBLOCK"));
|
||||
cmd->has_error = -1;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
#else /* !defined(F_SETFL) */
|
||||
cmd->has_error = ENOTSUP;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
#endif
|
||||
} else if ((cmd->inbuf && cmd->infd == -1) ||
|
||||
(cmd->outbuf && cmd->outfdptr != &cmd->outfd) ||
|
||||
(cmd->errbuf && cmd->errfdptr != &cmd->errfd)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user