blob: e4b5d78dbb70960d2906763daf9cb19751f68ddb (
plain) (
blame)
123456789101112131415161718192021222324252627282930313233 | #include <stdlib.h> #include "libc.h" #include "lock.h" #include "fork_impl.h" #define COUNT 32 static void (*funcs[COUNT])(void); static int count; static volatile int lock[1]; volatile int *const __at_quick_exit_lockptr = lock; 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)) { int r = 0; LOCK(lock); if (count == 32) r = -1; else funcs[count++] = func; UNLOCK(lock); return r; }
|