提交 38e00513 编写于 作者: D Derek Parker

thread.Halt: Remove duplication between OS implementations

Bring similar code up to top level, and keep OS dependant code in OS
dependant files. DRY up code a bit.
上级 b9846c76
......@@ -299,3 +299,19 @@ func (thread *Thread) GetG() (g *G, err error) {
func (thread *Thread) Stopped() bool {
return thread.stopped()
}
// Stops this thread from executing. Actual
// implementation is OS dependant. Look in OS
// thread file.
func (thread *Thread) Halt() (err error) {
defer func() {
if err == nil {
thread.running = false
}
}()
if thread.Stopped() {
return
}
err = thread.halt()
return
}
......@@ -12,15 +12,7 @@ type OSSpecificDetails struct {
registers C.x86_thread_state64_t
}
func (t *Thread) Halt() (err error) {
defer func() {
if err == nil {
t.running = false
}
}()
if t.Stopped() {
return
}
func (t *Thread) halt() (err error) {
kret := C.thread_suspend(t.os.thread_act)
if kret != C.KERN_SUCCESS {
errStr := C.GoString(C.mach_error_string(C.mach_error_t(kret)))
......
......@@ -12,15 +12,7 @@ type OSSpecificDetails struct {
registers sys.PtraceRegs
}
func (t *Thread) Halt() (err error) {
defer func() {
if err == nil {
t.running = false
}
}()
if t.Stopped() {
return
}
func (t *Thread) halt() (err error) {
err = sys.Tgkill(t.dbp.Pid, t.Id, sys.SIGSTOP)
if err != nil {
err = fmt.Errorf("halt err %s on thread %d", err, t.Id)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册