1
0
mirror of https://github.com/golang/go synced 2024-09-30 14:28:33 -06:00

os: convert Process.isdone to atomic type

Change-Id: Ia3213d22678be0d56bf4f34dfe458441f7f5da97
Reviewed-on: https://go-review.googlesource.com/c/go/+/426077
Run-TryBot: Michael Pratt <mpratt@google.com>
Run-TryBot: Jenny Rakoczy <jenny@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Jenny Rakoczy <jenny@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Jenny Rakoczy <jenny@golang.org>
This commit is contained in:
cuiweixie 2022-08-27 10:13:50 +08:00 committed by Gopher Robot
parent e50dd0e974
commit dedce99c06

View File

@ -21,7 +21,7 @@ var ErrProcessDone = errors.New("os: process already finished")
type Process struct { type Process struct {
Pid int Pid int
handle uintptr // handle is accessed atomically on Windows handle uintptr // handle is accessed atomically on Windows
isdone uint32 // process has been successfully waited on, non zero if true isdone atomic.Bool // process has been successfully waited on
sigMu sync.RWMutex // avoid race between wait and signal sigMu sync.RWMutex // avoid race between wait and signal
} }
@ -32,11 +32,11 @@ func newProcess(pid int, handle uintptr) *Process {
} }
func (p *Process) setDone() { func (p *Process) setDone() {
atomic.StoreUint32(&p.isdone, 1) p.isdone.Store(true)
} }
func (p *Process) done() bool { func (p *Process) done() bool {
return atomic.LoadUint32(&p.isdone) > 0 return p.isdone.Load()
} }
// ProcAttr holds the attributes that will be applied to a new process // ProcAttr holds the attributes that will be applied to a new process