}
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;
}
}
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;
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;