mirror of
				https://github.com/go-delve/delve.git
				synced 2025-10-31 02:36:18 +08:00 
			
		
		
		
	Refactor: Use thread-locked goroutine for ptrace ops
Previously either the terminal client or the debugger service would either lock main goroutine to a thread or provide a locked goroutine to run _all_ DebuggedProcess functions in. This is unnecessary because only ptrace functions need to be run from the same thread that originated the PT_ATTACH request. Here we use a specific thread-locked goroutine to service any ptrace request. That goroutine is also responsible for the initial spawning / attaching of the process, since it must be responsible for the PT_ATTACH request.
This commit is contained in:
		| @ -18,14 +18,18 @@ func (r *Regs) CX() uint64 { | ||||
| 	return r.regs.Rcx | ||||
| } | ||||
|  | ||||
| func (r *Regs) SetPC(thread *Thread, pc uint64) error { | ||||
| func (r *Regs) SetPC(thread *Thread, pc uint64) (err error) { | ||||
| 	r.regs.SetPC(pc) | ||||
| 	return sys.PtraceSetRegs(thread.Id, r.regs) | ||||
| 	thread.dbp.execPtraceFunc(func() { err = sys.PtraceSetRegs(thread.Id, r.regs) }) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func registers(thread *Thread) (Registers, error) { | ||||
| 	var regs sys.PtraceRegs | ||||
| 	err := sys.PtraceGetRegs(thread.Id, ®s) | ||||
| 	var ( | ||||
| 		regs sys.PtraceRegs | ||||
| 		err  error | ||||
| 	) | ||||
| 	thread.dbp.execPtraceFunc(func() { err = sys.PtraceGetRegs(thread.Id, ®s) }) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Derek Parker
					Derek Parker