func (dbp *Process) addThread(port int, attach bool) (*Thread, error) { if thread, ok := dbp.Threads[port]; ok { return thread, nil } thread := &Thread{ Id: port, dbp: dbp, os: new(OSSpecificDetails), } dbp.Threads[port] = thread thread.os.thread_act = C.thread_act_t(port) if dbp.CurrentThread == nil { dbp.CurrentThread = thread } return thread, nil }
func (dbp *Process) Kill() (err error) { err = sys.Kill(dbp.Pid, sys.SIGKILL) if err != nil { return errors.New("could not deliver signal: " + err.Error()) } for port := range dbp.Threads { if C.thread_resume(C.thread_act_t(port)) != C.KERN_SUCCESS { return errors.New("could not resume task") } } for { port := C.mach_port_wait(dbp.os.portSet) if port == dbp.os.notificationPort { break } } dbp.exited = true return }