提交 b5289fd7 编写于 作者: R Rich Felker

add c11 quick_exit and at_quick_exit functions

上级 a5d6199d
......@@ -43,6 +43,8 @@ void abort (void);
int atexit (void (*) (void));
void exit (int);
void _Exit (int);
int at_quick_exit (void (*) (void));
void quick_exit (int);
char *getenv (const char *);
......
#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;
}
#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);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册