1 76193d7c 2003-09-30 devnull #include "threadimpl.h"
4 76193d7c 2003-09-30 devnull threadid(void)
6 76193d7c 2003-09-30 devnull return _threadgetproc()->thread->id;
10 76193d7c 2003-09-30 devnull threadpid(int id)
14 76193d7c 2003-09-30 devnull Thread *t;
16 76193d7c 2003-09-30 devnull if (id < 0)
17 76193d7c 2003-09-30 devnull return -1;
18 76193d7c 2003-09-30 devnull if (id == 0)
19 76193d7c 2003-09-30 devnull return _threadgetproc()->pid;
20 76193d7c 2003-09-30 devnull lock(&_threadpq.lock);
21 76193d7c 2003-09-30 devnull for (p = _threadpq.head; p->next; p = p->next){
22 76193d7c 2003-09-30 devnull lock(&p->lock);
23 76193d7c 2003-09-30 devnull for (t = p->threads.head; t; t = t->nextt)
24 76193d7c 2003-09-30 devnull if (t->id == id){
25 76193d7c 2003-09-30 devnull pid = p->pid;
26 76193d7c 2003-09-30 devnull unlock(&p->lock);
27 76193d7c 2003-09-30 devnull unlock(&_threadpq.lock);
28 76193d7c 2003-09-30 devnull return pid;
30 76193d7c 2003-09-30 devnull unlock(&p->lock);
32 76193d7c 2003-09-30 devnull unlock(&_threadpq.lock);
33 76193d7c 2003-09-30 devnull return -1;
37 76193d7c 2003-09-30 devnull threadsetgrp(int ng)
40 76193d7c 2003-09-30 devnull Thread *t;
42 76193d7c 2003-09-30 devnull t = _threadgetproc()->thread;
43 76193d7c 2003-09-30 devnull og = t->grp;
44 76193d7c 2003-09-30 devnull t->grp = ng;
45 76193d7c 2003-09-30 devnull return og;
49 76193d7c 2003-09-30 devnull threadgetgrp(void)
51 76193d7c 2003-09-30 devnull return _threadgetproc()->thread->grp;
55 be36ff68 2004-04-29 devnull threadsetname(char *fmt, ...)
58 76193d7c 2003-09-30 devnull Thread *t;
59 be36ff68 2004-04-29 devnull va_list arg;
61 76193d7c 2003-09-30 devnull p = _threadgetproc();
62 76193d7c 2003-09-30 devnull t = p->thread;
63 7966faa9 2004-09-23 devnull if(t->name)
64 7966faa9 2004-09-23 devnull free(t->name);
65 be36ff68 2004-04-29 devnull va_start(arg, fmt);
66 7966faa9 2004-09-23 devnull t->name = vsmprint(fmt, arg);
67 99dfa1da 2004-06-17 devnull va_end(arg);
69 ba15d71b 2004-10-22 devnull _threaddebug(DBGSCHED, "set name %s", t->name);
70 76193d7c 2003-09-30 devnull /* Plan 9 only
71 76193d7c 2003-09-30 devnull if(p->nthreads == 1){
72 76193d7c 2003-09-30 devnull snprint(buf, sizeof buf, "#p/%d/args", getpid());
73 76193d7c 2003-09-30 devnull if((fd = open(buf, OWRITE)) >= 0){
74 76193d7c 2003-09-30 devnull snprint(buf, sizeof buf, "%s [%s]", argv0, name);
75 76193d7c 2003-09-30 devnull n = strlen(buf)+1;
76 76193d7c 2003-09-30 devnull s = strchr(buf, ' ');
78 76193d7c 2003-09-30 devnull *s = '\0';
79 76193d7c 2003-09-30 devnull write(fd, buf, n);
80 76193d7c 2003-09-30 devnull close(fd);
87 76193d7c 2003-09-30 devnull threadgetname(void)
89 7966faa9 2004-09-23 devnull return _threadgetproc()->thread->name;
93 76193d7c 2003-09-30 devnull threaddata(void)
95 76193d7c 2003-09-30 devnull return &_threadgetproc()->thread->udata[0];
99 76193d7c 2003-09-30 devnull procdata(void)
101 76193d7c 2003-09-30 devnull return &_threadgetproc()->udata;
104 76193d7c 2003-09-30 devnull static Lock privlock;
105 76193d7c 2003-09-30 devnull static int privmask = 1;
108 76193d7c 2003-09-30 devnull tprivalloc(void)
112 76193d7c 2003-09-30 devnull lock(&privlock);
113 76193d7c 2003-09-30 devnull for(i=0; i<NPRIV; i++)
114 76193d7c 2003-09-30 devnull if(!(privmask&(1<<i))){
115 76193d7c 2003-09-30 devnull privmask |= 1<<i;
116 76193d7c 2003-09-30 devnull unlock(&privlock);
117 76193d7c 2003-09-30 devnull return i;
119 76193d7c 2003-09-30 devnull unlock(&privlock);
120 76193d7c 2003-09-30 devnull return -1;
124 76193d7c 2003-09-30 devnull tprivfree(int i)
126 76193d7c 2003-09-30 devnull if(i < 0 || i >= NPRIV)
127 76193d7c 2003-09-30 devnull abort();
128 76193d7c 2003-09-30 devnull lock(&privlock);
129 76193d7c 2003-09-30 devnull privmask &= ~(1<<i);
133 76193d7c 2003-09-30 devnull tprivaddr(int i)
135 76193d7c 2003-09-30 devnull return &_threadgetproc()->thread->udata[i];