From 911cef2e3ba7548ee13e761f88457c6bbe1fa7fe Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 20 Feb 2018 15:30:31 +0000 Subject: [PATCH] runtime: allow preemption in fast syscall return Let a fast syscall return be a preemption point. This helps with tight loops that make system calls, as in BenchmarkSyscallExcessWork. Reviewed-on: https://go-review.googlesource.com/94895 From-SVN: r257848 --- gcc/go/gofrontend/MERGE | 2 +- libgo/go/runtime/proc.go | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 61bed68afca..c52bf4e0dc0 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -459a8a94e04a19bde7173ef7cf2db369c2e62e2d +c6e0970f75508e209a10a7db5164d6ea3f9b28bf The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/runtime/proc.go b/libgo/go/runtime/proc.go index 1d95109d7c0..20fa0ad05be 100644 --- a/libgo/go/runtime/proc.go +++ b/libgo/go/runtime/proc.go @@ -2794,6 +2794,13 @@ func exitsyscall(dummy int32) { exitsyscallclear(_g_) _g_.m.locks-- _g_.throwsplit = false + + // Check preemption, since unlike gc we don't check on + // every call. + if getg().preempt { + checkPreempt() + } + return }