Commit 534c67ab authored by Rémy Oudompheng's avatar Rémy Oudompheng

syscall: add Cloneflags to Linux SysProcAttr.

Also use clone(2) syscall instead of fork().

Fixes #6214.

R=golang-dev, bradfitz, dave
CC=golang-dev
https://golang.org/cl/13159044
parent d0dd420a
...@@ -20,6 +20,7 @@ type SysProcAttr struct { ...@@ -20,6 +20,7 @@ type SysProcAttr struct {
Noctty bool // Detach fd 0 from controlling terminal Noctty bool // Detach fd 0 from controlling terminal
Ctty int // Controlling TTY fd (Linux only) Ctty int // Controlling TTY fd (Linux only)
Pdeathsig Signal // Signal that the process will get when its parent dies (Linux only) Pdeathsig Signal // Signal that the process will get when its parent dies (Linux only)
Cloneflags uintptr // Flags for clone calls (Linux only)
} }
// Implemented in runtime package. // Implemented in runtime package.
...@@ -61,7 +62,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr ...@@ -61,7 +62,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
// About to call fork. // About to call fork.
// No more allocation or calls of non-assembly functions. // No more allocation or calls of non-assembly functions.
runtime_BeforeFork() runtime_BeforeFork()
r1, _, err1 = RawSyscall(SYS_FORK, 0, 0, 0) r1, _, err1 = RawSyscall6(SYS_CLONE, uintptr(SIGCHLD)|sys.Cloneflags, 0, 0, 0, 0, 0)
if err1 != 0 { if err1 != 0 {
runtime_AfterFork() runtime_AfterFork()
return 0, err1 return 0, err1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment