From f14119b561cfeefb93e8d773033caeea572dbe71 Mon Sep 17 00:00:00 2001 From: Colin Arnott Date: Thu, 16 Jul 2020 17:42:47 +0000 Subject: os: export errFinished as ErrProcessDone (*Process).Signal returns an error sentinel, previously errFinished, when (*Process).done or syscall.ESRCH. Callers would like the ability to test for this state, so the value has been exported as ErrProcessDone. Fixes #39444 Change-Id: I510e7647cc032af290180de5149f35ab7b09a526 Reviewed-on: https://go-review.googlesource.com/c/go/+/242998 Run-TryBot: Ian Lance Taylor Reviewed-by: Ian Lance Taylor Reviewed-by: Tobias Klauser Trust: Tobias Klauser --- src/os/exec_unix.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/os/exec_unix.go') diff --git a/src/os/exec_unix.go b/src/os/exec_unix.go index 7759a2d2ea..624061297b 100644 --- a/src/os/exec_unix.go +++ b/src/os/exec_unix.go @@ -59,7 +59,8 @@ func (p *Process) wait() (ps *ProcessState, err error) { return ps, nil } -var errFinished = errors.New("os: process already finished") +// ErrProcessDone indicates a Process has finished. +var ErrProcessDone = errors.New("os: process already finished") func (p *Process) signal(sig Signal) error { if p.Pid == -1 { @@ -71,7 +72,7 @@ func (p *Process) signal(sig Signal) error { p.sigMu.RLock() defer p.sigMu.RUnlock() if p.done() { - return errFinished + return ErrProcessDone } s, ok := sig.(syscall.Signal) if !ok { @@ -79,7 +80,7 @@ func (p *Process) signal(sig Signal) error { } if e := syscall.Kill(p.Pid, s); e != nil { if e == syscall.ESRCH { - return errFinished + return ErrProcessDone } return e } -- cgit v1.3 From 45205bc47b88f49020edabed18f99153cadf718e Mon Sep 17 00:00:00 2001 From: Alwin Doss Date: Sun, 1 Nov 2020 04:43:20 +0000 Subject: os: export ErrProcessDone variable in windows and plan9 Exposes ErrProcessDone variable in windows and plan9 also returns this error code instead of errors.New("os: process already finished") Fixes #42311 Change-Id: Ie807b6526e7b6c27636e6bffe5ff0c904b319be4 GitHub-Last-Rev: 2153e0d7020d8ee9e94087d02977ea049b7fd6a0 GitHub-Pull-Request: golang/go#42313 Reviewed-on: https://go-review.googlesource.com/c/go/+/266997 Reviewed-by: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot Trust: Dmitri Shuralyov --- src/os/exec.go | 4 ++++ src/os/exec_plan9.go | 3 +-- src/os/exec_unix.go | 3 --- src/os/exec_windows.go | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/os/exec_unix.go') diff --git a/src/os/exec.go b/src/os/exec.go index cab6a73d94..edb773a092 100644 --- a/src/os/exec.go +++ b/src/os/exec.go @@ -5,6 +5,7 @@ package os import ( + "errors" "internal/testlog" "runtime" "sync" @@ -13,6 +14,9 @@ import ( "time" ) +// ErrProcessDone indicates a Process has finished. +var ErrProcessDone = errors.New("os: process already finished") + // Process stores the information about a process created by StartProcess. type Process struct { Pid int diff --git a/src/os/exec_plan9.go b/src/os/exec_plan9.go index ef8dad11b6..8580153911 100644 --- a/src/os/exec_plan9.go +++ b/src/os/exec_plan9.go @@ -5,7 +5,6 @@ package os import ( - "errors" "runtime" "syscall" "time" @@ -52,7 +51,7 @@ func (p *Process) writeProcFile(file string, data string) error { func (p *Process) signal(sig Signal) error { if p.done() { - return errors.New("os: process already finished") + return ErrProcessDone } if e := p.writeProcFile("note", sig.String()); e != nil { return NewSyscallError("signal", e) diff --git a/src/os/exec_unix.go b/src/os/exec_unix.go index 624061297b..a1703a1259 100644 --- a/src/os/exec_unix.go +++ b/src/os/exec_unix.go @@ -59,9 +59,6 @@ func (p *Process) wait() (ps *ProcessState, err error) { return ps, nil } -// ErrProcessDone indicates a Process has finished. -var ErrProcessDone = errors.New("os: process already finished") - func (p *Process) signal(sig Signal) error { if p.Pid == -1 { return errors.New("os: process already released") diff --git a/src/os/exec_windows.go b/src/os/exec_windows.go index 24ddf89bb6..5710401acd 100644 --- a/src/os/exec_windows.go +++ b/src/os/exec_windows.go @@ -61,7 +61,7 @@ func (p *Process) signal(sig Signal) error { return syscall.EINVAL } if p.done() { - return errors.New("os: process already finished") + return ErrProcessDone } if sig == Kill { err := terminateProcess(p.Pid, 1) -- cgit v1.3