]> Cypherpunks repositories - gostls13.git/commit
os: fix a race between Process.signal() and wait() on Windows
authorPatrick Mezard <patrick@mezard.eu>
Sun, 10 May 2015 13:35:52 +0000 (15:35 +0200)
committerAlex Brainman <alex.brainman@gmail.com>
Thu, 11 Jun 2015 01:33:25 +0000 (01:33 +0000)
commitd574b59fc71e52ac7feead94348ee61ef8d16a1c
treedad308ced266c6ede5a57d2e3f8111d728455743
parentdc32b7f0fda20e6f3a4f893ca886681cb765739e
os: fix a race between Process.signal() and wait() on Windows

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/9904
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/os/exec.go
src/os/exec_windows.go