void syscall_cgocallback () { M *mp; mp = runtime_m (); if (mp == NULL) { runtime_needm (); mp = runtime_m (); mp->dropextram = true; } runtime_exitsyscall (0); if (runtime_m ()->ncgo == 0) { /* The C call to Go came from a thread not currently running any Go. In the case of -buildmode=c-archive or c-shared, this call may be coming in before package initialization is complete. Wait until it is. */ chanrecv1 (NULL, runtime_main_init_done, NULL); } mp = runtime_m (); if (mp->needextram) { mp->needextram = 0; runtime_newextram (); } }
void syscall_cgocall () { M* m; if (runtime_needextram && runtime_cas (&runtime_needextram, 1, 0)) runtime_newextram (); runtime_lockOSThread(); m = runtime_m (); ++m->ncgocall; ++m->ncgo; runtime_entersyscall (0); }
void syscall_cgocall () { M* m; G* g; if (runtime_needextram && runtime_cas (&runtime_needextram, 1, 0)) runtime_newextram (); m = runtime_m (); ++m->ncgocall; g = runtime_g (); ++g->ncgo; runtime_entersyscall (); }