X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=libringbuffer%2Fshm.c;h=873e6e87597311ae9a5cc03c3d1c27a53dae025c;hb=d13aca5c82f8f367179b229c40a953fc3275badf;hp=8f158e2f0507feeb8d05e000f08241a0e356b9e9;hpb=1d4981969313da002983ca979bd85c95493f7316;p=lttng-ust.git diff --git a/libringbuffer/shm.c b/libringbuffer/shm.c index 8f158e2f..873e6e87 100644 --- a/libringbuffer/shm.c +++ b/libringbuffer/shm.c @@ -34,7 +34,7 @@ struct shm_object *shm_object_table_append(struct shm_object_table *table, if (table->allocated_len >= table->size) return NULL; - obj = &table->objects[table->allocated_len++]; + obj = &table->objects[table->allocated_len]; /* wait_fd: create pipe */ ret = pipe(waitfd); @@ -49,7 +49,13 @@ struct shm_object *shm_object_table_append(struct shm_object_table *table, goto error_fcntl; } } - *obj->wait_fd = *waitfd; + /* The write end of the pipe needs to be non-blocking */ + ret = fcntl(waitfd[1], F_SETFL, O_NONBLOCK); + if (ret < 0) { + PERROR("fcntl"); + goto error_fcntl; + } + memcpy(obj->wait_fd, waitfd, sizeof(waitfd)); /* shm_fd: create shm */ @@ -92,6 +98,8 @@ struct shm_object *shm_object_table_append(struct shm_object_table *table, obj->memory_map = memory_map; obj->memory_map_size = memory_map_size; obj->allocated_len = 0; + obj->index = table->allocated_len++; + return obj; error_mmap: @@ -112,7 +120,6 @@ error_fcntl: } } error_pipe: - free(obj); return NULL; }