Fix: handle sys_futex EINTR and EWOULDBLOCK
[lttng-ust.git] / tests / ust-multi-test / ust-multi-test.c
index 965c34cd0acbcaec18ba589b5f2923b95bf60f40..c003c5a93f0f00bf033be2a54cccd7015b7996f5 100644 (file)
@@ -638,11 +638,15 @@ error:
 
 int update_futex(int fd, int active)
 {
-       size_t mmap_size = sysconf(_SC_PAGE_SIZE);
+       long page_size;
        char *wait_shm_mmap;
        int ret;
 
-       wait_shm_mmap = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE,
+       page_size = sysconf(_SC_PAGE_SIZE);
+       if (page_size < 0) {
+               goto error;
+       }
+       wait_shm_mmap = mmap(NULL, page_size, PROT_READ | PROT_WRITE,
                  MAP_SHARED, fd, 0);
        if (wait_shm_mmap == MAP_FAILED) {
                perror("mmap");
@@ -651,12 +655,15 @@ int update_futex(int fd, int active)
 
        if (active) {
                uatomic_set((int32_t *) wait_shm_mmap, 1);
-               futex_async((int32_t *) wait_shm_mmap, FUTEX_WAKE,
-                               INT_MAX, NULL, NULL, 0);
+               if (futex_async((int32_t *) wait_shm_mmap, FUTEX_WAKE,
+                               INT_MAX, NULL, NULL, 0) < 0) {
+                       perror("futex_async");
+                       goto error;
+               }
        } else {
                uatomic_set((int32_t *) wait_shm_mmap, 0);
        }
-       ret = munmap(wait_shm_mmap, mmap_size);
+       ret = munmap(wait_shm_mmap, page_size);
        if (ret) {
                perror("Error unmapping wait shm");
                goto error;
@@ -872,6 +879,7 @@ end:
                ret = system(cmd);
                if (ret < 0) {
                        printf("Unable to clean %s\n", home_rundir);
+                       return -1;
                }
        }
 
This page took 0.023518 seconds and 4 git commands to generate.