runtime: ignore _Gscan bit when checking status in CgocallDone
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 12 Jun 2017 23:14:05 +0000 (23:14 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 12 Jun 2017 23:14:05 +0000 (23:14 +0000)
commita282a875c8856b024b51b8c643d080a6ea2dd8ab
treed3dcd53208e91dad347a36dceeff7ac3d626c251
parentb51483f48f3cc67cf4b508bdd9c4b6a47b44c53a
runtime: ignore _Gscan bit when checking status in CgocallDone

    Also always access the atomicstatus field atomically.

    The effect of not checking the _Gscan bit is that if the GC decides to
    scan the stack just as the goroutine is leaving the system call, the
    goroutine might fail to call exitsyscall.  Then then typically causes
    a runtime assertion failure later on.  If we do call exitsyscall as we
    should, it will stall (in casgstatus) until the _Gscan bit is cleared.

    No separate test.  I've observed causing sporadic failures running the
    misc/cgo tests, but we don't currently have a way to run those
    routinely for gccgo.  I should fix that.

    Reviewed-on: https://go-review.googlesource.com/45392

From-SVN: r249138
gcc/go/gofrontend/MERGE
libgo/go/runtime/cgo_gccgo.go
libgo/go/runtime/proc.go