From 16f16cf86d4b1ce7e10c7de52389dc1268b63bc5 Mon Sep 17 00:00:00 2001 From: Alessandro Arzilli Date: Thu, 21 Jul 2016 00:36:31 +0200 Subject: [PATCH] proc: bugfix: cleaning up spurious process exited errors (#599) Fixes flakiness of TestCmdLineArgs. --- proc/proc_linux.go | 4 ++++ proc/proc_test.go | 2 +- proc/registers.go | 7 +------ 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/proc/proc_linux.go b/proc/proc_linux.go index 041318b7..3ac4d68b 100644 --- a/proc/proc_linux.go +++ b/proc/proc_linux.go @@ -292,6 +292,10 @@ func (dbp *Process) trapWait(pid int) (*Thread, error) { var cloned uint dbp.execPtraceFunc(func() { cloned, err = sys.PtraceGetEventMsg(wpid) }) if err != nil { + if err == sys.ESRCH { + // thread died while we were adding it + continue + } return nil, fmt.Errorf("could not get event message: %s", err) } th, err = dbp.addThread(int(cloned), false) diff --git a/proc/proc_test.go b/proc/proc_test.go index f8cfa977..3c98d026 100644 --- a/proc/proc_test.go +++ b/proc/proc_test.go @@ -1685,7 +1685,7 @@ func TestCmdLineArgs(t *testing.T) { } exit, exited := err.(ProcessExitedError) if !exited { - t.Fatalf("Process did not exit!", err) + t.Fatalf("Process did not exit: %v", err) } else { if exit.Status != 0 { t.Fatalf("process exited with invalid status", exit.Status) diff --git a/proc/registers.go b/proc/registers.go index de82a6e7..ebd6a26c 100644 --- a/proc/registers.go +++ b/proc/registers.go @@ -1,6 +1,5 @@ package proc -import "fmt" import "errors" // Registers is an interface for a generic register type. The @@ -21,11 +20,7 @@ var UnknownRegisterError = errors.New("unknown register") // Registers obtains register values from the debugged process. func (t *Thread) Registers() (Registers, error) { - regs, err := registers(t) - if err != nil { - return nil, fmt.Errorf("could not get registers: %s", err) - } - return regs, nil + return registers(t) } // PC returns the current PC for this thread. -- GitLab