Commit df3e6ce4 authored by Russ Cox's avatar Russ Cox

runtime: disable preemption during runtime.settype

It assumes that the m will not change, and the m may
change if the goroutine is preempted.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/11560043
parent b2b15d12
......@@ -672,6 +672,7 @@ runtime·settype(void *v, uintptr t)
runtime·throw("settype: zero type");
mp = m;
m->locks++;
buf = mp->settype_buf;
i = mp->settype_bufsize;
buf[i+0] = (uintptr)v;
......@@ -687,6 +688,10 @@ runtime·settype(void *v, uintptr t)
s = runtime·MHeap_Lookup(&runtime·mheap, v);
*(uintptr*)((uintptr)v+s->elemsize-sizeof(uintptr)) = t;
}
m->locks--;
if(m->locks == 0 && g->preempt) // restore the preemption request in case we've cleared it in newstack
g->stackguard0 = StackPreempt;
}
void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment