From: Aram Hăvărneanu Date: Thu, 13 Mar 2014 07:26:01 +0000 (+1100) Subject: runtime: avoid runtime·cgocall in functions called by forkAndExecInChild X-Git-Tag: go1.3beta1~369 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=28792f5d83578d9087be5d3b2490ae8a10e189de;p=gostls13.git runtime: avoid runtime·cgocall in functions called by forkAndExecInChild Calling runtime·cgocall could trigger a GC in the child while gclock was held by the parent. Fixes #7511 LGTM=bradfitz, dvyukov, dave R=golang-codereviews, bradfitz, dvyukov, dave CC=golang-codereviews, rsc https://golang.org/cl/75210044 --- diff --git a/src/pkg/runtime/syscall_solaris.goc b/src/pkg/runtime/syscall_solaris.goc index cd30dd1788..21bcce4d17 100644 --- a/src/pkg/runtime/syscall_solaris.goc +++ b/src/pkg/runtime/syscall_solaris.goc @@ -170,7 +170,7 @@ func execve(path uintptr, argv uintptr, envp uintptr) (err uintptr) { c.fn = (void*)libc·execve; c.n = 3; c.args = (void*)&path; - runtime·cgocall(runtime·asmsysvicall6, &c); + runtime·asmcgocall(runtime·asmsysvicall6, &c); err = c.err; } @@ -193,7 +193,7 @@ func fcntl1(fd uintptr, cmd uintptr, arg uintptr) (val uintptr, err uintptr) { c.fn = (void*)libc·fcntl; c.n = 3; c.args = (void*)&fd; - runtime·cgocall(runtime·asmsysvicall6, &c); + runtime·asmcgocall(runtime·asmsysvicall6, &c); err = c.err; val = c.r1; } @@ -227,7 +227,7 @@ func ioctl(fd uintptr, req uintptr, arg uintptr) (err uintptr) { c.fn = (void*)libc·ioctl; c.n = 3; c.args = (void*)&fd; - runtime·cgocall(runtime·asmsysvicall6, &c); + runtime·asmcgocall(runtime·asmsysvicall6, &c); err = c.err; } @@ -338,7 +338,7 @@ func write1(fd uintptr, buf uintptr, nbyte uintptr) (n uintptr, err uintptr) { c.fn = (void*)libc·write; c.n = 3; c.args = (void*)fd; - runtime·cgocall(runtime·asmsysvicall6, &c); + runtime·asmcgocall(runtime·asmsysvicall6, &c); err = c.err; n = c.r1; }