#include #define NOEXITDEFINE #include #define NEXIT 33 static Lock onexlock; static struct { void (*f)(void); int pid; }onex[NEXIT]; int atexit(void (*f)(void)) { int i; lock(&onexlock); for(i=0; i= 0; i--) if((f = onex[i].f) && pid == onex[i].pid) { onex[i].f = 0; (*f)(); } if(s == 0 || *s == 0) exit(0); exit(exitcode(s)); } void p9exit(int code) { int i, pid; void (*f)(void); pid = getpid(); for(i = NEXIT-1; i >= 0; i--) if((f = onex[i].f) && pid == onex[i].pid) { onex[i].f = 0; (*f)(); } exit(code); }