author | Rich Felker <dalias@aerifal.cx> | 2012年04月24日 16:32:23 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012年04月24日 16:32:23 -0400 |
commit | 4750cf4202c29a895639b89099a7bdbe9ae422b6 (patch) | |
tree | b682c69140ada09d2c498a80e7d84865d4c51e60 /src/exit/atexit.c | |
parent | e7655ed37bc9c2d79d921af4f287ee5cf2788661 (diff) | |
download | musl-4750cf4202c29a895639b89099a7bdbe9ae422b6.tar.gz |
-rw-r--r-- | src/exit/atexit.c | 14 |
diff --git a/src/exit/atexit.c b/src/exit/atexit.c index 9d9c2fbe..1b40cb9b 100644 --- a/src/exit/atexit.c +++ b/src/exit/atexit.c @@ -14,22 +14,22 @@ static struct fl void *a[COUNT]; } builtin, *head; -static int lock; +static int lock[2]; void __funcs_on_exit() { int i; void (*func)(void *), *arg; - LOCK(&lock); + LOCK(lock); for (; head; head=head->next) { for (i=COUNT-1; i>=0 && !head->f[i]; i--); if (i<0) continue; func = head->f[i]; arg = head->a[i]; head->f[i] = 0; - UNLOCK(&lock); + UNLOCK(lock); func(arg); - LOCK(&lock); + LOCK(lock); } } @@ -41,7 +41,7 @@ int __cxa_atexit(void (*func)(void *), void *arg, void *dso) { int i; - LOCK(&lock); + LOCK(lock); /* Defer initialization of head so it can be in BSS */ if (!head) head = &builtin; @@ -50,7 +50,7 @@ int __cxa_atexit(void (*func)(void *), void *arg, void *dso) if (head->f[COUNT-1]) { struct fl *new_fl = calloc(sizeof(struct fl), 1); if (!new_fl) { - UNLOCK(&lock); + UNLOCK(lock); return -1; } new_fl->next = head; @@ -62,7 +62,7 @@ int __cxa_atexit(void (*func)(void *), void *arg, void *dso) head->f[i] = func; head->a[i] = arg; - UNLOCK(&lock); + UNLOCK(lock); return 0; } |