From: Andrew Gerrand Date: Mon, 22 Jul 2013 23:50:35 +0000 (+1000) Subject: [release-branch.go1.1] runtime: prevent sysmon from polling network excessivly X-Git-Tag: go1.1.2~7 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ceeda72babae48ab2dd25875497299d0dcbbd20d;p=gostls13.git [release-branch.go1.1] runtime: prevent sysmon from polling network excessivly ««« CL 11569043 / 6b3c351c7fe6 runtime: prevent sysmon from polling network excessivly If the network is not polled for 10ms, sysmon starts polling network on every iteration (every 20us) until another thread blocks in netpoll. Fixes issue 5922 . R=golang-dev, iant CC=golang-dev https://golang.org/cl/11569043 »»» Update #5928 R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/11438044 --- diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index 5734509e0c..9ad2ea091b 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -2015,6 +2015,7 @@ sysmon(void) lastpoll = runtime·atomicload64(&runtime·sched.lastpoll); now = runtime·nanotime(); if(lastpoll != 0 && lastpoll + 10*1000*1000 > now) { + runtime·cas64(&runtime·sched.lastpoll, lastpoll, now); gp = runtime·netpoll(false); // non-blocking injectglist(gp); }