19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <thread.h>
49a747e4fSDavid du Colombier #include "threadimpl.h"
59a747e4fSDavid du Colombier
69a747e4fSDavid du Colombier int _threaddebuglevel;
79a747e4fSDavid du Colombier
89a747e4fSDavid du Colombier void
_threaddebug(ulong flag,char * fmt,...)99a747e4fSDavid du Colombier _threaddebug(ulong flag, char *fmt, ...)
109a747e4fSDavid du Colombier {
119a747e4fSDavid du Colombier char buf[128];
129a747e4fSDavid du Colombier va_list arg;
139a747e4fSDavid du Colombier Fmt f;
149a747e4fSDavid du Colombier Proc *p;
159a747e4fSDavid du Colombier
169a747e4fSDavid du Colombier if((_threaddebuglevel&flag) == 0)
179a747e4fSDavid du Colombier return;
189a747e4fSDavid du Colombier
199a747e4fSDavid du Colombier fmtfdinit(&f, 2, buf, sizeof buf);
209a747e4fSDavid du Colombier
219a747e4fSDavid du Colombier p = _threadgetproc();
229a747e4fSDavid du Colombier if(p==nil)
239a747e4fSDavid du Colombier fmtprint(&f, "noproc ");
249a747e4fSDavid du Colombier else if(p->thread)
259a747e4fSDavid du Colombier fmtprint(&f, "%d.%d ", p->pid, p->thread->id);
269a747e4fSDavid du Colombier else
279a747e4fSDavid du Colombier fmtprint(&f, "%d._ ", p->pid);
289a747e4fSDavid du Colombier
299a747e4fSDavid du Colombier va_start(arg, fmt);
309a747e4fSDavid du Colombier fmtvprint(&f, fmt, arg);
319a747e4fSDavid du Colombier va_end(arg);
329a747e4fSDavid du Colombier fmtprint(&f, "\n");
339a747e4fSDavid du Colombier fmtfdflush(&f);
349a747e4fSDavid du Colombier }
359a747e4fSDavid du Colombier
369a747e4fSDavid du Colombier void
_threadassert(char * s)379a747e4fSDavid du Colombier _threadassert(char *s)
389a747e4fSDavid du Colombier {
399a747e4fSDavid du Colombier char buf[256];
409a747e4fSDavid du Colombier int n;
419a747e4fSDavid du Colombier Proc *p;
429a747e4fSDavid du Colombier
439a747e4fSDavid du Colombier p = _threadgetproc();
449a747e4fSDavid du Colombier if(p && p->thread)
45*57c2d8dcSDavid du Colombier n = snprint(buf, sizeof buf, "%d.%d ", p->pid, p->thread->id);
469a747e4fSDavid du Colombier else
479a747e4fSDavid du Colombier n = 0;
489a747e4fSDavid du Colombier snprint(buf+n, sizeof(buf)-n, "%s: assertion failed\n", s);
499a747e4fSDavid du Colombier write(2, buf, strlen(buf));
509a747e4fSDavid du Colombier abort();
519a747e4fSDavid du Colombier }
52