shm: check error value of shm_unlink
[ust.git] / libringbuffer / shm.c
index 36f7e36b6a573dc2738b4444d92da563ed5830c9..563903877f5eb59a62409ce32662a8bd6f7600bd 100644 (file)
@@ -74,7 +74,11 @@ struct shm_object *shm_object_table_append(struct shm_object_table *table,
         * crashes between shm_open and the following shm_unlink).
         */
        do {
-               (void) shm_unlink("ust-shm-tmp");
+               ret = shm_unlink("ust-shm-tmp");
+               if (ret < 0 && errno != ENOENT) {
+                       PERROR("shm_unlink");
+                       goto error_shm_unlink;
+               }
                shmfd = shm_open("ust-shm-tmp",
                                 O_CREAT | O_EXCL | O_RDWR, 0700);
        } while (shmfd < 0 && errno == EEXIST);
@@ -83,9 +87,9 @@ struct shm_object *shm_object_table_append(struct shm_object_table *table,
                goto error_shm_open;
        }
        ret = shm_unlink("ust-shm-tmp");
-       if (ret) {
+       if (ret < 0 && errno != ENOENT) {
                PERROR("shm_unlink");
-               goto error_unlink;
+               goto error_shm_release;
        }
        ret = ftruncate(shmfd, memory_map_size);
        if (ret) {
@@ -110,12 +114,13 @@ struct shm_object *shm_object_table_append(struct shm_object_table *table,
 
 error_mmap:
 error_ftruncate:
-error_unlink:
+error_shm_release:
        ret = close(shmfd);
        if (ret) {
                PERROR("close");
                assert(0);
        }
+error_shm_unlink:
 error_shm_open:
 error_fcntl:
        for (i = 0; i < 2; i++) {
This page took 0.023552 seconds and 4 git commands to generate.