]> Cypherpunks repositories - gostls13.git/commit
syscall: change Dup,Dup2,Dup3 to use Syscall, not RawSyscall
authorIan Lance Taylor <iant@golang.org>
Thu, 26 Mar 2015 15:02:16 +0000 (08:02 -0700)
committerIan Lance Taylor <iant@golang.org>
Thu, 26 Mar 2015 17:29:08 +0000 (17:29 +0000)
commit28074d5baad961f931df9895c57a82d164641f06
treedd528561e322bdb79e9965df076e107e9d3b0cb0
parentec2c7e6659c1ab3a10dc74df2c1303b749fbc364
syscall: change Dup,Dup2,Dup3 to use Syscall, not RawSyscall

This avoids hanging when a Go program uses a FUSE filesystem and the
dup system call has to close a file descriptor.  When dup uses
RawSyscall then the goroutine calling dup will occupy a scheduler slot
(a p structure) during the call, and may block waiting for some other
goroutine to respond to the close call on the FUSE filesystem.
Changing to Syscall avoids the problem.  This makes Dup a tiny bit
slower but is quite unlikely to make a difference for any real
programs.

Fixes #10202.

Change-Id: If6490a8f9b3c9cfed6acbfb4bfd1eaeac62ced17
Reviewed-on: https://go-review.googlesource.com/8095
Reviewed-by: Rob Pike <r@golang.org>
29 files changed:
src/syscall/syscall_darwin.go
src/syscall/syscall_dragonfly.go
src/syscall/syscall_freebsd.go
src/syscall/syscall_linux.go
src/syscall/syscall_linux_386.go
src/syscall/syscall_linux_amd64.go
src/syscall/syscall_linux_arm.go
src/syscall/syscall_linux_ppc64x.go
src/syscall/syscall_netbsd.go
src/syscall/syscall_openbsd.go
src/syscall/zsyscall_darwin_386.go
src/syscall/zsyscall_darwin_amd64.go
src/syscall/zsyscall_darwin_arm.go
src/syscall/zsyscall_dragonfly_amd64.go
src/syscall/zsyscall_freebsd_386.go
src/syscall/zsyscall_freebsd_amd64.go
src/syscall/zsyscall_freebsd_arm.go
src/syscall/zsyscall_linux_386.go
src/syscall/zsyscall_linux_amd64.go
src/syscall/zsyscall_linux_arm.go
src/syscall/zsyscall_linux_arm64.go
src/syscall/zsyscall_linux_ppc64.go
src/syscall/zsyscall_linux_ppc64le.go
src/syscall/zsyscall_netbsd_386.go
src/syscall/zsyscall_netbsd_amd64.go
src/syscall/zsyscall_netbsd_arm.go
src/syscall/zsyscall_openbsd_386.go
src/syscall/zsyscall_openbsd_amd64.go
src/syscall/zsyscall_openbsd_arm.go