1234567891011121314151617181920212223242526272829 |
- #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;
- }
|