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 76193d7c 2003-09-30 devnull threadsetname(char *name)
58 76193d7c 2003-09-30 devnull int fd, n;
59 76193d7c 2003-09-30 devnull char buf[128], *s;
62 76193d7c 2003-09-30 devnull Thread *t;
64 76193d7c 2003-09-30 devnull p = _threadgetproc();
65 76193d7c 2003-09-30 devnull t = p->thread;
66 76193d7c 2003-09-30 devnull if (t->cmdname)
67 76193d7c 2003-09-30 devnull free(t->cmdname);
68 76193d7c 2003-09-30 devnull t->cmdname = strdup(name);
69 76193d7c 2003-09-30 devnull /* Plan 9 only
70 76193d7c 2003-09-30 devnull if(p->nthreads == 1){
71 76193d7c 2003-09-30 devnull snprint(buf, sizeof buf, "#p/%d/args", getpid());
72 76193d7c 2003-09-30 devnull if((fd = open(buf, OWRITE)) >= 0){
73 76193d7c 2003-09-30 devnull snprint(buf, sizeof buf, "%s [%s]", argv0, name);
74 76193d7c 2003-09-30 devnull n = strlen(buf)+1;
75 76193d7c 2003-09-30 devnull s = strchr(buf, ' ');
77 76193d7c 2003-09-30 devnull *s = '\0';
78 76193d7c 2003-09-30 devnull write(fd, buf, n);
79 76193d7c 2003-09-30 devnull close(fd);
86 76193d7c 2003-09-30 devnull threadgetname(void)
88 76193d7c 2003-09-30 devnull return _threadgetproc()->thread->cmdname;
92 76193d7c 2003-09-30 devnull threaddata(void)
94 76193d7c 2003-09-30 devnull return &_threadgetproc()->thread->udata[0];
98 76193d7c 2003-09-30 devnull procdata(void)
100 76193d7c 2003-09-30 devnull return &_threadgetproc()->udata;
103 76193d7c 2003-09-30 devnull static Lock privlock;
104 76193d7c 2003-09-30 devnull static int privmask = 1;
107 76193d7c 2003-09-30 devnull tprivalloc(void)
111 76193d7c 2003-09-30 devnull lock(&privlock);
112 76193d7c 2003-09-30 devnull for(i=0; i<NPRIV; i++)
113 76193d7c 2003-09-30 devnull if(!(privmask&(1<<i))){
114 76193d7c 2003-09-30 devnull privmask |= 1<<i;
115 76193d7c 2003-09-30 devnull unlock(&privlock);
116 76193d7c 2003-09-30 devnull return i;
118 76193d7c 2003-09-30 devnull unlock(&privlock);
119 76193d7c 2003-09-30 devnull return -1;
123 76193d7c 2003-09-30 devnull tprivfree(int i)
125 76193d7c 2003-09-30 devnull if(i < 0 || i >= NPRIV)
126 76193d7c 2003-09-30 devnull abort();
127 76193d7c 2003-09-30 devnull lock(&privlock);
128 76193d7c 2003-09-30 devnull privmask &= ~(1<<i);
132 76193d7c 2003-09-30 devnull tprivaddr(int i)
134 76193d7c 2003-09-30 devnull return &_threadgetproc()->thread->udata[i];