runtime: lock M during cgo call

cgo should lock the M.
    
    
    See also https://golang.org/cl/18882 .
    
    Reviewed-on: https://go-review.googlesource.com/18883

From-SVN: r233670
This commit is contained in:
Ian Lance Taylor 2016-02-24 15:03:04 +00:00
parent f802a42401
commit 4501d9ad44
2 changed files with 5 additions and 1 deletions

View File

@ -1,4 +1,4 @@
1c3747d20789c73447ff71cbc739f7423c4bdf67
156f5f0152797ac2afe5f23803aeb3c7b8f8418e
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -41,6 +41,8 @@ syscall_cgocall ()
if (runtime_needextram && runtime_cas (&runtime_needextram, 1, 0))
runtime_newextram ();
runtime_lockOSThread();
m = runtime_m ();
++m->ncgocall;
g = runtime_g ();
@ -70,6 +72,8 @@ syscall_cgocalldone ()
_cgo_panic will already have exited syscall mode. */
if (g->status == Gsyscall)
runtime_exitsyscall ();
runtime_unlockOSThread();
}
/* Call back from C/C++ code to Go code. */