#include <stdlib.h> | |
#include "libc.h" | |
#define COUNT 32 | |
static void (*funcs[COUNT])(void); | |
static int count; | |
static volatile int lock[1]; | |
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; | |
} |