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 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

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