aboutsummaryrefslogtreecommitdiff
path: root/acid/thread
diff options
context:
space:
mode:
Diffstat (limited to 'acid/thread')
-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);
}