aboutsummaryrefslogtreecommitdiff
path: root/acid
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-05-23 00:58:00 +0000
committerrsc <devnull@localhost>2004-05-23 00:58:00 +0000
commitc9896e2edba3bf17061447f3491a866a74e2cbb9 (patch)
tree43dc804a07a6d08285c5a16cca7dd2e4dce3e948 /acid
parent1c39bb59193d68cb6119a053260d1381d303b24d (diff)
downloadplan9port-c9896e2edba3bf17061447f3491a866a74e2cbb9.tar.gz
plan9port-c9896e2edba3bf17061447f3491a866a74e2cbb9.tar.bz2
plan9port-c9896e2edba3bf17061447f3491a866a74e2cbb9.zip
be careful about not switching to procs unless necessary.
Diffstat (limited to 'acid')
-rw-r--r--acid/thread16
1 files changed, 11 insertions, 5 deletions
diff --git a/acid/thread b/acid/thread
index af3764b5..5b5337e0 100644
--- a/acid/thread
+++ b/acid/thread
@@ -81,11 +81,15 @@ defn stkignore(s){
}
defn threadstkline(T){
- local stk, frame, pc, pc0, file, s, sym, i, stop;
+ local stk, frame, pc, pc0, file, s, sym, i, stop, P, mainpid;
- if T.state == Running then
+ if T.state == Running then {
+ P = (Proc)T.proc;
+ mainpid = pid;
+ if mainpid != P.pid then setproc(P.pid);
stk = strace({});
- else
+ if mainpid != P.pid then setproc(mainpid);
+ } else
stk = strace(label(T.sched));
stop = 0;
@@ -151,7 +155,6 @@ defn pthreads(P){
local T, Tq, mainpid;
mainpid = pid;
-// setproc(P.pid);
Tq = (Tqueue)P.threads;
T = (Thread)Tq.$head;
while T != 0 do{
@@ -159,7 +162,6 @@ defn pthreads(P){
thread(T);
T = (Thread)T.nextt;
}
-// setproc(mainpid);
}
defn threads(){
@@ -305,7 +307,11 @@ defn threadstk(T){
// setproc(P.pid);
if T.state == Running then{
+ if P.pid != mainpid then
+ setproc(P.pid);
stk();
+ if P.pid != mainpid then
+ setproc(mainpid);
} else {
labstk(T.sched);
}