1*9a747e4fSDavid du Colombier #include <u.h>
2*9a747e4fSDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier #include <thread.h>
4*9a747e4fSDavid du Colombier #include "threadimpl.h"
5*9a747e4fSDavid du Colombier
6*9a747e4fSDavid du Colombier int _threaddebuglevel;
7*9a747e4fSDavid du Colombier
8*9a747e4fSDavid du Colombier void
_threaddebug(ulong flag,char * fmt,...)9*9a747e4fSDavid du Colombier _threaddebug(ulong flag, char *fmt, ...)
10*9a747e4fSDavid du Colombier {
11*9a747e4fSDavid du Colombier char buf[128];
12*9a747e4fSDavid du Colombier va_list arg;
13*9a747e4fSDavid du Colombier Fmt f;
14*9a747e4fSDavid du Colombier Proc *p;
15*9a747e4fSDavid du Colombier
16*9a747e4fSDavid du Colombier if((_threaddebuglevel&flag) == 0)
17*9a747e4fSDavid du Colombier return;
18*9a747e4fSDavid du Colombier
19*9a747e4fSDavid du Colombier fmtfdinit(&f, 2, buf, sizeof buf);
20*9a747e4fSDavid du Colombier
21*9a747e4fSDavid du Colombier p = _threadgetproc();
22*9a747e4fSDavid du Colombier if(p==nil)
23*9a747e4fSDavid du Colombier fmtprint(&f, "noproc ");
24*9a747e4fSDavid du Colombier else if(p->thread)
25*9a747e4fSDavid du Colombier fmtprint(&f, "%d.%d ", p->pid, p->thread->id);
26*9a747e4fSDavid du Colombier else
27*9a747e4fSDavid du Colombier fmtprint(&f, "%d._ ", p->pid);
28*9a747e4fSDavid du Colombier
29*9a747e4fSDavid du Colombier va_start(arg, fmt);
30*9a747e4fSDavid du Colombier fmtvprint(&f, fmt, arg);
31*9a747e4fSDavid du Colombier va_end(arg);
32*9a747e4fSDavid du Colombier fmtprint(&f, "\n");
33*9a747e4fSDavid du Colombier fmtfdflush(&f);
34*9a747e4fSDavid du Colombier }
35*9a747e4fSDavid du Colombier
36*9a747e4fSDavid du Colombier void
_threadassert(char * s)37*9a747e4fSDavid du Colombier _threadassert(char *s)
38*9a747e4fSDavid du Colombier {
39*9a747e4fSDavid du Colombier char buf[256];
40*9a747e4fSDavid du Colombier int n;
41*9a747e4fSDavid du Colombier Proc *p;
42*9a747e4fSDavid du Colombier
43*9a747e4fSDavid du Colombier p = _threadgetproc();
44*9a747e4fSDavid du Colombier if(p && p->thread)
45*9a747e4fSDavid du Colombier n = sprint(buf, "%d.%d ", p->pid, p->thread->id);
46*9a747e4fSDavid du Colombier else
47*9a747e4fSDavid du Colombier n = 0;
48*9a747e4fSDavid du Colombier snprint(buf+n, sizeof(buf)-n, "%s: assertion failed\n", s);
49*9a747e4fSDavid du Colombier write(2, buf, strlen(buf));
50*9a747e4fSDavid du Colombier abort();
51*9a747e4fSDavid du Colombier }
52