Blame


1 be22ae2d 2004-03-26 devnull #include <u.h>
2 76193d7c 2003-09-30 devnull #include <signal.h>
3 cd7ddc9b 2003-11-23 devnull #include "threadimpl.h"
4 76193d7c 2003-09-30 devnull
5 76193d7c 2003-09-30 devnull char *_threadexitsallstatus;
6 76193d7c 2003-09-30 devnull Channel *_threadwaitchan;
7 76193d7c 2003-09-30 devnull
8 76193d7c 2003-09-30 devnull void
9 76193d7c 2003-09-30 devnull threadexits(char *exitstr)
10 76193d7c 2003-09-30 devnull {
11 76193d7c 2003-09-30 devnull Proc *p;
12 76193d7c 2003-09-30 devnull Thread *t;
13 76193d7c 2003-09-30 devnull
14 76193d7c 2003-09-30 devnull p = _threadgetproc();
15 76193d7c 2003-09-30 devnull t = p->thread;
16 e97ceade 2003-12-06 devnull if(t == p->idle)
17 e97ceade 2003-12-06 devnull p->idle = nil;
18 76193d7c 2003-09-30 devnull t->moribund = 1;
19 cd7ddc9b 2003-11-23 devnull _threaddebug(DBGSCHED, "threadexits %s", exitstr);
20 76193d7c 2003-09-30 devnull if(exitstr==nil)
21 76193d7c 2003-09-30 devnull exitstr="";
22 76193d7c 2003-09-30 devnull utfecpy(p->exitstr, p->exitstr+ERRMAX, exitstr);
23 76193d7c 2003-09-30 devnull _sched();
24 76193d7c 2003-09-30 devnull }
25 76193d7c 2003-09-30 devnull
26 76193d7c 2003-09-30 devnull void
27 76193d7c 2003-09-30 devnull threadexitsall(char *exitstr)
28 76193d7c 2003-09-30 devnull {
29 cd7ddc9b 2003-11-23 devnull _threaddebug(DBGSCHED, "threadexitsall %s", exitstr);
30 76193d7c 2003-09-30 devnull if(exitstr == nil)
31 76193d7c 2003-09-30 devnull exitstr = "";
32 76193d7c 2003-09-30 devnull _threadexitsallstatus = exitstr;
33 76193d7c 2003-09-30 devnull _threaddebug(DBGSCHED, "_threadexitsallstatus set to %p", _threadexitsallstatus);
34 76193d7c 2003-09-30 devnull /* leave */
35 7966faa9 2004-09-23 devnull _threadexitallproc(exitstr);
36 76193d7c 2003-09-30 devnull }
37 76193d7c 2003-09-30 devnull
38 76193d7c 2003-09-30 devnull Channel*
39 76193d7c 2003-09-30 devnull threadwaitchan(void)
40 76193d7c 2003-09-30 devnull {
41 76193d7c 2003-09-30 devnull if(_threadwaitchan==nil)
42 76193d7c 2003-09-30 devnull _threadwaitchan = chancreate(sizeof(Waitmsg*), 16);
43 76193d7c 2003-09-30 devnull return _threadwaitchan;
44 76193d7c 2003-09-30 devnull }