mirror of
				https://github.com/go-delve/delve.git
				synced 2025-11-01 03:42:59 +08:00 
			
		
		
		
	proc: bugfix: propagate signals we don't handle to inferior
Fixes #419 (partial)
This commit is contained in:
		| @ -317,7 +317,10 @@ func (dbp *Process) trapWait(pid int) (*Thread, error) { | ||||
| 		} | ||||
| 		if th != nil { | ||||
| 			// TODO(dp) alert user about unexpected signals here. | ||||
| 			if err := th.Continue(); err != nil { | ||||
| 			if err := th.resumeWithSig(int(status.StopSignal())); err != nil { | ||||
| 				if err == sys.ESRCH { | ||||
| 					return nil, ProcessExitedError{Pid: dbp.Pid} | ||||
| 				} | ||||
| 				return nil, err | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
							
								
								
									
										31
									
								
								proc/proc_unix_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								proc/proc_unix_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| // +build linux darwin | ||||
|  | ||||
| package proc | ||||
|  | ||||
| import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
| 	"syscall" | ||||
|  | ||||
| 	protest "github.com/derekparker/delve/proc/test" | ||||
| ) | ||||
|  | ||||
| func TestIssue419(t *testing.T) { | ||||
| 	// SIGINT directed at the inferior should be passed along not swallowed by delve | ||||
| 	withTestProcess("issue419", t, func(p *Process, fixture protest.Fixture) { | ||||
| 		go func() { | ||||
| 			for { | ||||
| 				if p.Running() { | ||||
| 					time.Sleep(2 * time.Second) | ||||
| 					err := syscall.Kill(p.Pid, syscall.SIGINT) | ||||
| 					assertNoError(err, t, "syscall.Kill") | ||||
| 					return | ||||
| 				} | ||||
| 			} | ||||
| 		}() | ||||
| 		err := p.Continue() | ||||
| 		if _, exited := err.(ProcessExitedError); !exited { | ||||
| 			t.Fatalf("Unexpected error after Continue(): %v\n", err) | ||||
| 		} | ||||
| 	}) | ||||
| } | ||||
| @ -33,9 +33,13 @@ func (t *Thread) stopped() bool { | ||||
| 	return state == StatusTraceStop | ||||
| } | ||||
|  | ||||
| func (t *Thread) resume() (err error) { | ||||
| func (t *Thread) resume() error { | ||||
| 	return t.resumeWithSig(0) | ||||
| } | ||||
|  | ||||
| func (t *Thread) resumeWithSig(sig int) (err error) { | ||||
| 	t.running = true | ||||
| 	t.dbp.execPtraceFunc(func() { err = PtraceCont(t.ID, 0) }) | ||||
| 	t.dbp.execPtraceFunc(func() { err = PtraceCont(t.ID, sig) }) | ||||
| 	return | ||||
| } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 aarzilli
					aarzilli