• Patrick Mezard's avatar
    os: fix a race between Process.signal() and wait() on Windows · d574b59f
    Patrick Mezard authored
    Process.handle was accessed without synchronization while wait() and
    signal() could be called concurrently.
    
    A first solution was to add a Mutex in Process but it was probably too
    invasive given Process.handle is only used on Windows.
    
    This version uses atomic operations to read the handle value. There is
    still a race between isDone() and the value of the handle, but it only
    leads to slightly incorrect error codes. The caller may get a:
    
      errors.New("os: process already finished")
    
    instead of:
    
      syscall.EINVAL
    
    which sounds harmless.
    
    Fixes #9382
    
    Change-Id: Iefcc687a1166d5961c8f27154647b9b15a0f748a
    Reviewed-on: https://go-review.googlesource.com/9904Reviewed-by: 's avatarAlex Brainman <alex.brainman@gmail.com>
    Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    d574b59f
Name
Last commit
Last update
..
exec Loading commit data...
signal Loading commit data...
user Loading commit data...
dir_plan9.go Loading commit data...
dir_unix.go Loading commit data...
dir_windows.go Loading commit data...
doc.go Loading commit data...
env.go Loading commit data...
env_test.go Loading commit data...
env_unix_test.go Loading commit data...
error.go Loading commit data...
error_plan9.go Loading commit data...
error_test.go Loading commit data...
error_unix.go Loading commit data...
error_windows.go Loading commit data...
exec.go Loading commit data...
exec_plan9.go Loading commit data...
exec_posix.go Loading commit data...
exec_unix.go Loading commit data...
exec_windows.go Loading commit data...
export_test.go Loading commit data...
file.go Loading commit data...
file_darwin.go Loading commit data...
file_plan9.go Loading commit data...
file_posix.go Loading commit data...
file_unix.go Loading commit data...
file_windows.go Loading commit data...
getwd.go Loading commit data...
getwd_darwin.go Loading commit data...
os_test.go Loading commit data...
os_unix_test.go Loading commit data...
os_windows_test.go Loading commit data...
path.go Loading commit data...
path_plan9.go Loading commit data...
path_test.go Loading commit data...
path_unix.go Loading commit data...
path_windows.go Loading commit data...
pipe_bsd.go Loading commit data...
pipe_linux.go Loading commit data...
proc.go Loading commit data...
stat_darwin.go Loading commit data...
stat_dragonfly.go Loading commit data...
stat_freebsd.go Loading commit data...
stat_linux.go Loading commit data...
stat_nacl.go Loading commit data...
stat_netbsd.go Loading commit data...
stat_openbsd.go Loading commit data...
stat_plan9.go Loading commit data...
stat_solaris.go Loading commit data...
stat_windows.go Loading commit data...
sticky_bsd.go Loading commit data...
sticky_notbsd.go Loading commit data...
str.go Loading commit data...
sys_bsd.go Loading commit data...
sys_darwin.go Loading commit data...
sys_freebsd.go Loading commit data...
sys_linux.go Loading commit data...
sys_nacl.go Loading commit data...
sys_plan9.go Loading commit data...
sys_solaris.go Loading commit data...
sys_unix.go Loading commit data...
sys_windows.go Loading commit data...
types.go Loading commit data...
types_notwin.go Loading commit data...
types_windows.go Loading commit data...