set the reader side of the buffer-ready pipe non-blocking (experimental)
[ust.git] / libust / relay.c
index 05399b4a75787acb512eb30e09d6a721f80526a8..a31cdf7a1ca3ad4b6dc5ff69eeba7da8e2b88b4f 100644 (file)
@@ -26,6 +26,7 @@
 #include <sys/mman.h>
 #include <sys/ipc.h>
 #include <sys/shm.h>
+#include <fcntl.h>
 //#include "list.h"
 #include "relay.h"
 #include "channels.h"
@@ -101,7 +102,11 @@ static int relay_alloc_buf(struct rchan_buf *buf, size_t *size)
        *size = PAGE_ALIGN(*size);
 
        result = buf->shmid = shmget(getpid(), *size, IPC_CREAT | IPC_EXCL | 0700);
-       if(buf->shmid == -1) {
+       if(result == -1 && errno == EINVAL) {
+               ERR("shmget() returned EINVAL; maybe /proc/sys/kernel/shmmax should be increased.");
+               return -1;
+       }
+       else if(result == -1) {
                PERROR("shmget");
                return -1;
        }
@@ -1499,6 +1504,12 @@ static int ltt_relay_create_buffer(struct ltt_trace_struct *trace,
        ltt_buf->data_ready_fd_read = fds[0];
        ltt_buf->data_ready_fd_write = fds[1];
 
+       /* FIXME: do we actually need this? */
+       result = fcntl(fds[0], F_SETFL, O_NONBLOCK);
+       if(result == -1) {
+               PERROR("fcntl");
+       }
+
 //ust//        ltt_buf->commit_seq = malloc(sizeof(ltt_buf->commit_seq) * n_subbufs);
 //ust//        if(!ltt_buf->commit_seq) {
 //ust//                return -1;
This page took 0.022909 seconds and 4 git commands to generate.