summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/exit/exit.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/exit/exit.c b/src/exit/exit.c
index ae557c09..fc291484 100644
--- a/src/exit/exit.c
+++ b/src/exit/exit.c
@@ -2,6 +2,8 @@
#include <unistd.h>
#include <stdio.h>
#include "libc.h"
+#include "atomic.h"
+#include "syscall.h"
static void dummy()
{
@@ -13,10 +15,10 @@ weak_alias(dummy, __fflush_on_exit);
void exit(int code)
{
- static int lock[2];
+ static int lock;
/* If more than one thread calls exit, hang until _Exit ends it all */
- LOCK(lock);
+ while (a_swap(&lock, 1)) __syscall(SYS_pause);
/* Only do atexit & stdio flush if they were actually used */
__funcs_on_exit();