Index: fusl/src/exit/at_quick_exit.c |
diff --git a/fusl/src/exit/at_quick_exit.c b/fusl/src/exit/at_quick_exit.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..34541badad445160b743c6fe77bee0117f04bf49 |
--- /dev/null |
+++ b/fusl/src/exit/at_quick_exit.c |
@@ -0,0 +1,29 @@ |
+#include <stdlib.h> |
+#include "libc.h" |
+ |
+#define COUNT 32 |
+ |
+static void (*funcs[COUNT])(void); |
+static int count; |
+static volatile int lock[2]; |
+ |
+void __funcs_on_quick_exit() |
+{ |
+ void (*func)(void); |
+ LOCK(lock); |
+ while (count > 0) { |
+ func = funcs[--count]; |
+ UNLOCK(lock); |
+ func(); |
+ LOCK(lock); |
+ } |
+} |
+ |
+int at_quick_exit(void (*func)(void)) |
+{ |
+ if (count == 32) return -1; |
+ LOCK(lock); |
+ funcs[count++] = func; |
+ UNLOCK(lock); |
+ return 0; |
+} |