From 912bd566ad7b019aaca37ee4193f949afc34eaae Mon Sep 17 00:00:00 2001 From: ian Date: Fri, 16 Feb 2018 16:42:53 +0000 Subject: runtime: add some more preemption checks In particular this lets BenchmarkPingPongHog in runtime/proc_test.go complete. Reviewed-on: https://go-review.googlesource.com/94735 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257743 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgo/go/runtime/chan.go | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libgo/go/runtime/chan.go') diff --git a/libgo/go/runtime/chan.go b/libgo/go/runtime/chan.go index bf708aec5c4..87f7879e6f5 100644 --- a/libgo/go/runtime/chan.go +++ b/libgo/go/runtime/chan.go @@ -148,6 +148,11 @@ func chansend1(c *hchan, elem unsafe.Pointer) { * the operation; we'll see that it's now closed. */ func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool { + // Check preemption, since unlike gc we don't check on every call. + if getg().preempt { + checkPreempt() + } + if c == nil { if !block { return false @@ -430,6 +435,11 @@ func chanrecv(c *hchan, ep unsafe.Pointer, block bool) (selected, received bool) print("chanrecv: chan=", c, "\n") } + // Check preemption, since unlike gc we don't check on every call. + if getg().preempt { + checkPreempt() + } + if c == nil { if !block { return -- cgit v1.2.1