runtime: Use atomic load for in entersyscall.

Reportedly fixes PPC64 deadlock.
    
    From a comment by Gabriel Russell.
    
    Fixes golang/go#15051.
    
    Reviewed-on: https://go-review.googlesource.com/21450

From-SVN: r234694
This commit is contained in:
Ian Lance Taylor 2016-04-02 00:47:53 +00:00
parent 2e816b993d
commit bb72703282
2 changed files with 2 additions and 2 deletions

View File

@ -1,4 +1,4 @@
3de822d11255d439fac9717897b017aae2de18c2 8edf085a94579bd819a10f50328233812ceeb950
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -2042,7 +2042,7 @@ doentersyscall()
m->mcache = nil; m->mcache = nil;
m->p->m = nil; m->p->m = nil;
runtime_atomicstore(&m->p->status, Psyscall); runtime_atomicstore(&m->p->status, Psyscall);
if(runtime_sched.gcwaiting) { if(runtime_atomicload(&runtime_sched.gcwaiting)) {
runtime_lock(&runtime_sched); runtime_lock(&runtime_sched);
if (runtime_sched.stopwait > 0 && runtime_cas(&m->p->status, Psyscall, Pgcstop)) { if (runtime_sched.stopwait > 0 && runtime_cas(&m->p->status, Psyscall, Pgcstop)) {
if(--runtime_sched.stopwait == 0) if(--runtime_sched.stopwait == 0)