Use ENOMSG as fallback for ENODATA on freebsd
[lttng-ust.git] / libringbuffer / shm.c
index fc7fbfb2c0642ca0c410ddae0c6cd1a45b5a792e..4afb0c6e25b57f0083d1feb4532b54cbb2b612ec 100644 (file)
@@ -17,6 +17,8 @@
 #include <signal.h>
 #include <dirent.h>
 #include <lttng/align.h>
+#include <helper.h>
+#include <limits.h>
 
 struct shm_object_table *shm_object_table_create(size_t max_nb_obj)
 {
@@ -203,15 +205,19 @@ void shmp_object_destroy(struct shm_object *obj)
 {
        int ret, i;
 
-        ret = munmap(obj->memory_map, obj->memory_map_size);
-        if (ret) {
-                PERROR("umnmap");
-                assert(0);
-        }
-       ret = close(obj->shm_fd);
-       if (ret) {
-               PERROR("close");
-               assert(0);
+       if (!obj->is_shadow) {
+               ret = munmap(obj->memory_map, obj->memory_map_size);
+               if (ret) {
+                       PERROR("umnmap");
+                       assert(0);
+               }
+       }
+       if (obj->shm_fd >= 0) {
+               ret = close(obj->shm_fd);
+               if (ret) {
+                       PERROR("close");
+                       assert(0);
+               }
        }
        for (i = 0; i < 2; i++) {
                if (obj->wait_fd[i] < 0)
This page took 0.025103 seconds and 4 git commands to generate.