chiark / gitweb /
correct use of fcntl()
[elogind.git] / udevd.c
diff --git a/udevd.c b/udevd.c
index 9340be14cfd219d3b05c52a848f97e64edd05c43..701165b9ad0df601ecb53dcf53480843634ae0f9 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -921,12 +921,24 @@ int main(int argc, char *argv[], char *envp[])
                err("error getting pipes: %s", strerror(errno));
                goto exit;
        }
                err("error getting pipes: %s", strerror(errno));
                goto exit;
        }
-       retval = fcntl(signal_pipe[READ_END], F_SETFL, O_NONBLOCK);
+
+       retval = fcntl(signal_pipe[READ_END], F_GETFL, 0);
+       if (retval < 0) {
+               err("error fcntl on read pipe: %s", strerror(errno));
+               goto exit;
+       }
+       retval = fcntl(signal_pipe[READ_END], F_SETFL, retval | O_NONBLOCK);
        if (retval < 0) {
                err("error fcntl on read pipe: %s", strerror(errno));
                goto exit;
        }
        if (retval < 0) {
                err("error fcntl on read pipe: %s", strerror(errno));
                goto exit;
        }
-       retval = fcntl(signal_pipe[WRITE_END], F_SETFL, O_NONBLOCK);
+
+       retval = fcntl(signal_pipe[WRITE_END], F_GETFL, 0);
+       if (retval < 0) {
+               err("error fcntl on write pipe: %s", strerror(errno));
+               goto exit;
+       }
+       retval = fcntl(signal_pipe[WRITE_END], F_SETFL, retval | O_NONBLOCK);
        if (retval < 0) {
                err("error fcntl on write pipe: %s", strerror(errno));
                goto exit;
        if (retval < 0) {
                err("error fcntl on write pipe: %s", strerror(errno));
                goto exit;