mirror of
https://github.com/go-delve/delve.git
synced 2025-10-27 20:23:41 +08:00
proc/*: remove Process.Running
Implementing proc.Process.Running in a thread safe way is complicated and nothing actually uses it besides tests, so we are better off rewriting the tests without Running and removing it. In particular: * The call to d.target.Running() in service/debugger/debugger.go (Restart) can never return true because that line executes while holding processMutex and all continue operations are also executed while holding processMutex. * The call to dbp.Running() pkg/proc/native/proc.go (Detach) can never return true, because it's only called from debugger.(*Debugger).detach() which is also always called while holding processMutex. Since some tests are hard to write correctly without Process.Running a simpler interface, Process.NotifyResumed, is introduced. Fixes #830
This commit is contained in:
committed by
Alessandro Arzilli
parent
98142c695b
commit
16d8bd647f
@ -25,24 +25,21 @@ func TestIssue419(t *testing.T) {
|
||||
_, err := setFunctionBreakpoint(p, "main.main")
|
||||
assertNoError(err, t, "SetBreakpoint()")
|
||||
assertNoError(proc.Continue(p), t, "Continue()")
|
||||
resumeChan := make(chan struct{})
|
||||
go func() {
|
||||
for {
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
if p.Running() {
|
||||
time.Sleep(2 * time.Second)
|
||||
if p.Pid() <= 0 {
|
||||
// if we don't stop the inferior the test will never finish
|
||||
p.RequestManualStop()
|
||||
p.Kill()
|
||||
t.Fatalf("Pid is zero or negative: %d", p.Pid())
|
||||
return
|
||||
}
|
||||
err := syscall.Kill(p.Pid(), syscall.SIGINT)
|
||||
assertNoError(err, t, "syscall.Kill")
|
||||
return
|
||||
}
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
<-resumeChan
|
||||
if p.Pid() <= 0 {
|
||||
// if we don't stop the inferior the test will never finish
|
||||
p.RequestManualStop()
|
||||
p.Kill()
|
||||
t.Fatalf("Pid is zero or negative: %d", p.Pid())
|
||||
return
|
||||
}
|
||||
err := syscall.Kill(p.Pid(), syscall.SIGINT)
|
||||
assertNoError(err, t, "syscall.Kill")
|
||||
}()
|
||||
p.ResumeNotify(resumeChan)
|
||||
err = proc.Continue(p)
|
||||
if _, exited := err.(proc.ProcessExitedError); !exited {
|
||||
t.Fatalf("Unexpected error after Continue(): %v\n", err)
|
||||
|
||||
Reference in New Issue
Block a user