Enforce DL_LIBS value instead of hard coded -ldl
[lttng-tools.git] / src / common / pipe.c
index 52ee08a978e5a3a1f9b8ecd45b697b7106956120..4fe45efada3e7dabfefd57b72b71cbcf167f2b03 100644 (file)
@@ -154,9 +154,28 @@ static int _pipe_set_flags(struct lttng_pipe *pipe, int flags)
        }
 
        for (i = 0; i < 2; i++) {
-               ret = fcntl(pipe->fd[i], F_SETFD, flags);
-               if (ret < 0) {
-                       PERROR("fcntl lttng pipe %d", flags);
+               if (flags & O_NONBLOCK) {
+                       ret = fcntl(pipe->fd[i], F_SETFL, O_NONBLOCK);
+                       if (ret < 0) {
+                               PERROR("fcntl lttng pipe %d", flags);
+                               goto end;
+                       }
+               }
+               if (flags & FD_CLOEXEC) {
+                       ret = fcntl(pipe->fd[i], F_SETFD, FD_CLOEXEC);
+                       if (ret < 0) {
+                               PERROR("fcntl lttng pipe %d", flags);
+                               goto end;
+                       }
+               }
+               /*
+                * We only check for O_NONBLOCK or FD_CLOEXEC, if another flag is
+                * needed, we can add it, but for now just make sure we don't make
+                * mistakes with the parameters we pass.
+                */
+               if (!(flags & O_NONBLOCK) && !(flags & FD_CLOEXEC)) {
+                       fprintf(stderr, "Unsupported flag\n");
+                       ret = -1;
                        goto end;
                }
        }
@@ -227,7 +246,6 @@ struct lttng_pipe *lttng_pipe_named_open(const char *path, mode_t mode,
        fd_r = open(path, O_RDONLY | O_NONBLOCK);
        if (fd_r < 0) {
                PERROR("open fifo");
-               ret = fd_r;
                goto error;
        }
        pipe->fd[0] = fd_r;
@@ -236,7 +254,6 @@ struct lttng_pipe *lttng_pipe_named_open(const char *path, mode_t mode,
        fd_w = open(path, O_WRONLY | O_NONBLOCK);
        if (fd_w < 0) {
                PERROR("open fifo");
-               ret = fd_w;
                goto error;
        }
        pipe->fd[1] = fd_w;
This page took 0.024054 seconds and 4 git commands to generate.