projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
revert hacks for types of stdint.h integer constant macros
[musl]
/
src
/
thread
/
synccall.c
diff --git
a/src/thread/synccall.c
b/src/thread/synccall.c
index
91ac5eb
..
2cd25e4
100644
(file)
--- a/
src/thread/synccall.c
+++ b/
src/thread/synccall.c
@@
-4,7
+4,7
@@
static struct chain {
struct chain *next;
sem_t sem, sem2;
static struct chain {
struct chain *next;
sem_t sem, sem2;
-} *head;
+} *head
, *cur
;
static void (*callback)(void *), *context;
static int chainlen;
static void (*callback)(void *), *context;
static int chainlen;
@@
-47,11
+47,19
@@
static void handler(int sig, siginfo_t *si, void *ctx)
errno = old_errno;
}
errno = old_errno;
}
+void __synccall_wait()
+{
+ struct chain *ch = cur;
+ sem_post(&ch->sem2);
+ while (sem_wait(&ch->sem));
+ sem_post(&ch->sem);
+}
+
void __synccall(void (*func)(void *), void *ctx)
{
pthread_t self;
struct sigaction sa;
void __synccall(void (*func)(void *), void *ctx)
{
pthread_t self;
struct sigaction sa;
- struct chain *
cur, *
next;
+ struct chain *next;
uint64_t oldmask;
if (!libc.threads_minus_1) {
uint64_t oldmask;
if (!libc.threads_minus_1) {