diff mbox

libgo patch committed: Remove unnecessary Entersyscall (RMs: OK for GCC 5 branch?)

Message ID CAOyqgcWLYHVcpOASjzQwcTauwAnN3vi0077mhHTgyq3Z+rkrsw@mail.gmail.com
State New
Headers show

Commit Message

Ian Lance Taylor July 13, 2015, 6:55 p.m. UTC
This patch by Lynn Boger removes unnecessary duplicate calls to
Entersyscall and Exitsyscall from the GNU/Linux Getdents function.
The calls are duplicates because they are called by Syscall, also
called by Getdents.  These duplicate calls sometimes cause the
deadlock detector to fire incorrectly, reported as
http://golang.org/issue/11406 .  This patch fixes that problem.
Bootstrapped and ran Go tests on mainline, GCC 4.9 branch, and GCC 5
branch.  Committed to mainline and 4.9 branch.

Release managers: OK to commit to GCC 5 branch?

Ian

Comments

Richard Biener July 14, 2015, 8:35 a.m. UTC | #1
On Mon, Jul 13, 2015 at 8:55 PM, Ian Lance Taylor <iant@golang.org> wrote:
> This patch by Lynn Boger removes unnecessary duplicate calls to
> Entersyscall and Exitsyscall from the GNU/Linux Getdents function.
> The calls are duplicates because they are called by Syscall, also
> called by Getdents.  These duplicate calls sometimes cause the
> deadlock detector to fire incorrectly, reported as
> http://golang.org/issue/11406 .  This patch fixes that problem.
> Bootstrapped and ran Go tests on mainline, GCC 4.9 branch, and GCC 5
> branch.  Committed to mainline and 4.9 branch.
>
> Release managers: OK to commit to GCC 5 branch?

Ok.

Richard.

> Ian
diff mbox

Patch

Index: libgo/go/syscall/libcall_linux.go
===================================================================
--- libgo/go/syscall/libcall_linux.go	(revision 225715)
+++ libgo/go/syscall/libcall_linux.go	(working copy)
@@ -223,7 +223,6 @@  func Getdents(fd int, buf []byte) (n int
 	} else {
 		p = (*byte)(unsafe.Pointer(&_zero))
 	}
-	Entersyscall()
 	s := SYS_GETDENTS64
 	if s == 0 {
 		s = SYS_GETDENTS
@@ -233,7 +232,6 @@  func Getdents(fd int, buf []byte) (n int
 	if n < 0 {
 		err = errno
 	}
-	Exitsyscall()
 	return
 }