diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 09eb03a356a21a9de06f49e97935f8c6274a33d4..c88d9346e0202075593d3c1ff1db352a35f176c3 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -910,6 +910,7 @@ virRandom; virRandomInitialize; virRun; virRunWithHook; +virSetBlocking; virSetCloseExec; virSetNonBlock; virSetUIDGID; diff --git a/src/util/util.c b/src/util/util.c index f41e117d3980b0eabe841f6225b3facdfb9001cb..e573f4adf9cec1a3f83620157e354cfc7f97051f 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -244,16 +244,19 @@ virArgvToString(const char *const *argv) return ret; } -int virSetNonBlock(int fd) { +int virSetBlocking(int fd, bool blocking) { #ifndef WIN32 int flags; if ((flags = fcntl(fd, F_GETFL)) < 0) return -1; - flags |= O_NONBLOCK; + if (blocking) + flags &= ~O_NONBLOCK; + else + flags |= O_NONBLOCK; if ((fcntl(fd, F_SETFL, flags)) < 0) return -1; #else - unsigned long flag = 1; + unsigned long flag = blocking ? 0 : 1; /* This is actually Gnulib's replacement rpl_ioctl function. * We can't call ioctlsocket directly in any case. @@ -264,6 +267,10 @@ int virSetNonBlock(int fd) { return 0; } +int virSetNonBlock(int fd) { + return virSetBlocking(fd, false); +} + #ifndef WIN32 diff --git a/src/util/util.h b/src/util/util.h index 5f6473c70c436f6165f6639341beb01e226f3be1..31c3a336199fecee982ebf26b432472d0f6e500b 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -49,6 +49,7 @@ enum { VIR_EXEC_CLEAR_CAPS = (1 << 2), }; +int virSetBlocking(int fd, bool blocking) ATTRIBUTE_RETURN_CHECK; int virSetNonBlock(int fd) ATTRIBUTE_RETURN_CHECK; int virSetCloseExec(int fd) ATTRIBUTE_RETURN_CHECK;