fix mismatched signatures for strtod_l family
[musl] / src / linux / membarrier.c
index 26d143e..343f736 100644 (file)
@@ -9,13 +9,8 @@ static void dummy_0(void)
 {
 }
 
-static void dummy_1(pthread_t t)
-{
-}
-
 weak_alias(dummy_0, __tl_lock);
 weak_alias(dummy_0, __tl_unlock);
-weak_alias(dummy_1, __tl_sync);
 
 static sem_t barrier_sem;
 
@@ -44,17 +39,18 @@ int __membarrier(int cmd, int flags)
                        .sa_handler = bcast_barrier
                };
                memset(&sa.sa_mask, -1, sizeof sa.sa_mask);
-               __libc_sigaction(SIGSYNCCALL, &sa, 0);  
-               for (td=self->next; td!=self; td=td->next)
-                       __syscall(SYS_tkill, td->tid, SIGSYNCCALL);
-               for (td=self->next; td!=self; td=td->next)
-                       sem_wait(&barrier_sem);
-               sa.sa_handler = SIG_IGN;
-               __libc_sigaction(SIGSYNCCALL, &sa, 0);
+               if (!__libc_sigaction(SIGSYNCCALL, &sa, 0)) {
+                       for (td=self->next; td!=self; td=td->next)
+                               __syscall(SYS_tkill, td->tid, SIGSYNCCALL);
+                       for (td=self->next; td!=self; td=td->next)
+                               sem_wait(&barrier_sem);
+                       r = 0;
+                       sa.sa_handler = SIG_IGN;
+                       __libc_sigaction(SIGSYNCCALL, &sa, 0);
+               }
                sem_destroy(&barrier_sem);
                __tl_unlock();
                __restore_sigs(&set);
-               return 0;
        }
        return __syscall_ret(r);
 }