blob: 69f3f738b2770fa6ff44e44a5da9f581986399c2 [file] [log] [blame]
#include <u.h>
#include <signal.h>
#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 */
_kthreadexitallproc(exitstr);
}
Channel*
threadwaitchan(void)
{
if(_threadwaitchan==nil)
_threadwaitchan = chancreate(sizeof(Waitmsg*), 16);
return _threadwaitchan;
}