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)12void __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))24int 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