]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: syscall_forkx on Solaris can return error on success
authorAndrew Stormont <astormont@racktopsystems.com>
Wed, 11 Dec 2019 00:31:44 +0000 (00:31 +0000)
committerIan Lance Taylor <iant@golang.org>
Wed, 11 Dec 2019 01:10:28 +0000 (01:10 +0000)
The syscall_forkx function returns the value of errno even on success.  This can be a problem when using cgo where an atfork handler might be registered; if the atfork handler does something which causes errno to be set the caller of syscall_forkx can be misled into thinking the fork has failed.  This causes the various exec functions in the runtime package to hang.

Change-Id: Ia1842179226078a0cbbea33d541aa1187dc47f68
GitHub-Last-Rev: 4dc4db75c82a826da9a50c323b7e3ddfe46ed6c0
GitHub-Pull-Request: golang/go#36076
Reviewed-on: https://go-review.googlesource.com/c/go/+/210742
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/syscall_solaris.go

index 76db54d274aca8d365f4ceb0cba6e30b2f7e2ec0..094516927f3f495ad9b4817772fa510db3e35bf9 100644 (file)
@@ -142,6 +142,9 @@ func syscall_forkx(flags uintptr) (pid uintptr, err uintptr) {
                args: uintptr(unsafe.Pointer(&flags)),
        }
        asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
+       if int(call.r1) != -1 {
+               call.err = 0
+       }
        return call.r1, call.err
 }