mirror of https://git.musl-libc.org/git/musl
3 changed files with 46 additions and 0 deletions
@ -0,0 +1,29 @@ |
|||
#include <stdlib.h> |
|||
#include "libc.h" |
|||
|
|||
#define COUNT 32 |
|||
|
|||
static void (*funcs[COUNT])(void); |
|||
static int count; |
|||
static 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; |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
#include <stdlib.h> |
|||
#include "syscall.h" |
|||
#include "atomic.h" |
|||
#include "libc.h" |
|||
|
|||
static void dummy() { } |
|||
weak_alias(dummy, __funcs_on_quick_exit); |
|||
|
|||
void quick_exit(int code) |
|||
{ |
|||
static int lock; |
|||
while (a_swap(&lock, 1)) __syscall(SYS_pause); |
|||
__funcs_on_quick_exit(); |
|||
_Exit(code); |
|||
} |
|||
Loading…
Reference in new issue