void newosproc(M *m, G *g, void *stk, void (*fn)(void)) { m->tls[0] = m->id; // so 386 asm can find it if(0){ printf("newosproc stk=%p m=%p g=%p fn=%p id=%d/%d ostk=%p\n", stk, m, g, fn, m->id, m->tls[0], &m); } bsdthread_create(stk, m, g, fn); }
void runtime·newosproc(M *mp, G *gp, void *stk, void (*fn)(void)) { int32 errno; Sigset oset; mp->tls[0] = mp->id; // so 386 asm can find it if(0){ runtime·printf("newosproc stk=%p m=%p g=%p fn=%p id=%d/%d ostk=%p\n", stk, mp, gp, fn, mp->id, mp->tls[0], &mp); } runtime·sigprocmask(SIG_SETMASK, &sigset_all, &oset); errno = runtime·bsdthread_create(stk, mp, gp, fn); runtime·sigprocmask(SIG_SETMASK, &oset, nil); if(errno < 0) { runtime·printf("runtime: failed to create new OS thread (have %d already; errno=%d)\n", runtime·mcount(), -errno); runtime·throw("runtime.newosproc"); } }