Blame


1 76193d7c 2003-09-30 devnull #include "threadimpl.h"
2 76193d7c 2003-09-30 devnull
3 76193d7c 2003-09-30 devnull int
4 76193d7c 2003-09-30 devnull threadid(void)
5 76193d7c 2003-09-30 devnull {
6 76193d7c 2003-09-30 devnull return _threadgetproc()->thread->id;
7 76193d7c 2003-09-30 devnull }
8 76193d7c 2003-09-30 devnull
9 76193d7c 2003-09-30 devnull int
10 76193d7c 2003-09-30 devnull threadpid(int id)
11 76193d7c 2003-09-30 devnull {
12 76193d7c 2003-09-30 devnull int pid;
13 76193d7c 2003-09-30 devnull Proc *p;
14 76193d7c 2003-09-30 devnull Thread *t;
15 76193d7c 2003-09-30 devnull
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;
29 76193d7c 2003-09-30 devnull }
30 76193d7c 2003-09-30 devnull unlock(&p->lock);
31 76193d7c 2003-09-30 devnull }
32 76193d7c 2003-09-30 devnull unlock(&_threadpq.lock);
33 76193d7c 2003-09-30 devnull return -1;
34 76193d7c 2003-09-30 devnull }
35 76193d7c 2003-09-30 devnull
36 76193d7c 2003-09-30 devnull int
37 76193d7c 2003-09-30 devnull threadsetgrp(int ng)
38 76193d7c 2003-09-30 devnull {
39 76193d7c 2003-09-30 devnull int og;
40 76193d7c 2003-09-30 devnull Thread *t;
41 76193d7c 2003-09-30 devnull
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;
46 76193d7c 2003-09-30 devnull }
47 76193d7c 2003-09-30 devnull
48 76193d7c 2003-09-30 devnull int
49 76193d7c 2003-09-30 devnull threadgetgrp(void)
50 76193d7c 2003-09-30 devnull {
51 76193d7c 2003-09-30 devnull return _threadgetproc()->thread->grp;
52 76193d7c 2003-09-30 devnull }
53 76193d7c 2003-09-30 devnull
54 76193d7c 2003-09-30 devnull void
55 be36ff68 2004-04-29 devnull threadsetname(char *fmt, ...)
56 76193d7c 2003-09-30 devnull {
57 76193d7c 2003-09-30 devnull Proc *p;
58 76193d7c 2003-09-30 devnull Thread *t;
59 be36ff68 2004-04-29 devnull va_list arg;
60 76193d7c 2003-09-30 devnull
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);
68 be36ff68 2004-04-29 devnull
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, ' ');
77 76193d7c 2003-09-30 devnull if(s)
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);
81 76193d7c 2003-09-30 devnull }
82 76193d7c 2003-09-30 devnull }
83 76193d7c 2003-09-30 devnull */
84 76193d7c 2003-09-30 devnull }
85 76193d7c 2003-09-30 devnull
86 76193d7c 2003-09-30 devnull char*
87 76193d7c 2003-09-30 devnull threadgetname(void)
88 76193d7c 2003-09-30 devnull {
89 7966faa9 2004-09-23 devnull return _threadgetproc()->thread->name;
90 76193d7c 2003-09-30 devnull }
91 76193d7c 2003-09-30 devnull
92 76193d7c 2003-09-30 devnull void**
93 76193d7c 2003-09-30 devnull threaddata(void)
94 76193d7c 2003-09-30 devnull {
95 76193d7c 2003-09-30 devnull return &_threadgetproc()->thread->udata[0];
96 76193d7c 2003-09-30 devnull }
97 76193d7c 2003-09-30 devnull
98 76193d7c 2003-09-30 devnull void**
99 76193d7c 2003-09-30 devnull procdata(void)
100 76193d7c 2003-09-30 devnull {
101 76193d7c 2003-09-30 devnull return &_threadgetproc()->udata;
102 76193d7c 2003-09-30 devnull }
103 76193d7c 2003-09-30 devnull
104 76193d7c 2003-09-30 devnull static Lock privlock;
105 76193d7c 2003-09-30 devnull static int privmask = 1;
106 76193d7c 2003-09-30 devnull
107 76193d7c 2003-09-30 devnull int
108 76193d7c 2003-09-30 devnull tprivalloc(void)
109 76193d7c 2003-09-30 devnull {
110 76193d7c 2003-09-30 devnull int i;
111 76193d7c 2003-09-30 devnull
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;
118 76193d7c 2003-09-30 devnull }
119 76193d7c 2003-09-30 devnull unlock(&privlock);
120 76193d7c 2003-09-30 devnull return -1;
121 76193d7c 2003-09-30 devnull }
122 76193d7c 2003-09-30 devnull
123 76193d7c 2003-09-30 devnull void
124 76193d7c 2003-09-30 devnull tprivfree(int i)
125 76193d7c 2003-09-30 devnull {
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);
130 76193d7c 2003-09-30 devnull }
131 76193d7c 2003-09-30 devnull
132 76193d7c 2003-09-30 devnull void**
133 76193d7c 2003-09-30 devnull tprivaddr(int i)
134 76193d7c 2003-09-30 devnull {
135 76193d7c 2003-09-30 devnull return &_threadgetproc()->thread->udata[i];
136 76193d7c 2003-09-30 devnull }