1 #define _ALL_SOURCE
2 #include "libc.h"
3 #include <stdlib.h>
4 #include <threads.h>
5 
6 #define COUNT 32
7 
8 static void (*funcs[COUNT])(void);
9 static int count;
10 static mtx_t lock = MTX_INIT;
11 
__funcs_on_quick_exit(void)12 void __funcs_on_quick_exit(void) {
13     void (*func)(void);
14     mtx_lock(&lock);
15     while (count > 0) {
16         func = funcs[--count];
17         mtx_unlock(&lock);
18         func();
19         mtx_lock(&lock);
20     }
21     mtx_unlock(&lock);
22 }
23 
at_quick_exit(void (* func)(void))24 int at_quick_exit(void (*func)(void)) {
25     if (count == COUNT)
26         return -1;
27     mtx_lock(&lock);
28     funcs[count++] = func;
29     mtx_unlock(&lock);
30     return 0;
31 }
32