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