From f4ec73bb62284d569a3e2ddd31b330d2616db0ab Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Sat, 28 Feb 2015 09:05:37 -0500 Subject: [PATCH] Fix hanging issue on Linux --- proctl/proctl_linux.go | 6 +++++- proctl/threads_linux.go | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/proctl/proctl_linux.go b/proctl/proctl_linux.go index a0235ae7..a6db5d7e 100644 --- a/proctl/proctl_linux.go +++ b/proctl/proctl_linux.go @@ -112,6 +112,7 @@ func (dbp *DebuggedProcess) addThread(tid int, attach bool) (*ThreadContext, err } func (dbp *DebuggedProcess) updateThreadList() error { + var attach bool tids, _ := filepath.Glob(fmt.Sprintf("/proc/%d/task/*", dbp.Pid)) for _, tidpath := range tids { tidstr := filepath.Base(tidpath) @@ -119,7 +120,10 @@ func (dbp *DebuggedProcess) updateThreadList() error { if err != nil { return err } - if _, err := dbp.addThread(tid, false); err != nil { + if tid != dbp.Pid { + attach = true + } + if _, err := dbp.addThread(tid, attach); err != nil { return err } } diff --git a/proctl/threads_linux.go b/proctl/threads_linux.go index a7272c34..926708a0 100644 --- a/proctl/threads_linux.go +++ b/proctl/threads_linux.go @@ -44,7 +44,7 @@ func (t *ThreadContext) blocked() bool { // TODO(dp) check err pc, _ := t.CurrentPC() fn := t.Process.GoSymTable.PCToFunc(pc) - if fn != nil && ((fn.Name == "runtime.futex") || (fn.Name == "runtime.usleep")) { + if fn != nil && ((fn.Name == "runtime.futex") || (fn.Name == "runtime.usleep") || (fn.Name == "runtime.clone")) { return true } return false