#include #include #include "threadimpl.h" char *_threadexitsallstatus; Channel *_threadwaitchan; void threadexits(char *exitstr) { Proc *p; Thread *t; p = _threadgetproc(); t = p->thread; if(t == p->idle) p->idle = nil; t->moribund = 1; _threaddebug(DBGSCHED, "threadexits %s", exitstr); if(exitstr==nil) exitstr=""; utfecpy(p->exitstr, p->exitstr+ERRMAX, exitstr); _sched(); } void threadexitsall(char *exitstr) { _threaddebug(DBGSCHED, "threadexitsall %s", exitstr); if(exitstr == nil) exitstr = ""; _threadexitsallstatus = exitstr; _threaddebug(DBGSCHED, "_threadexitsallstatus set to %p", _threadexitsallstatus); /* leave */ _threadexitallproc(exitstr); } Channel* threadwaitchan(void) { if(_threadwaitchan==nil) _threadwaitchan = chancreate(sizeof(Waitmsg*), 16); return _threadwaitchan; }