Add missing error handling
[lttng-ust.git] / libringbuffer / shm.c
index 8f158e2f0507feeb8d05e000f08241a0e356b9e9..873e6e87597311ae9a5cc03c3d1c27a53dae025c 100644 (file)
@@ -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;
        
 }
This page took 0.024484 seconds and 4 git commands to generate.