cmd/gc: do not race instrument syscall.forkAndExecInChild

Race instrumentation can allocate, switch stacks, preempt, etc.
All that is not allowed in between fork and exec.
Fixes #4840.

R=golang-dev, daniel.morsing, dave
CC=golang-dev
https://golang.org/cl/11324044
This commit is contained in:
Dmitriy Vyukov 2013-07-16 15:35:03 +04:00
parent 7e270cf6c4
commit 63e0ddc7bf
3 changed files with 15 additions and 1 deletions

View file

@ -28,6 +28,7 @@ type SysProcAttr struct {
// In the child, this function must not acquire any locks, because
// they might have been locked at the time of the fork. This means
// no rescheduling, no malloc calls, and no new stack segments.
// For the same reason compiler does not race instrument it.
// The calls to RawSyscall are okay because they are assembly
// functions that do not grow the stack.
func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr *ProcAttr, sys *SysProcAttr, pipe int) (pid int, err Errno) {