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 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 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