From df3e6ce4b1df508624082d31abb24300f9057b86 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 18 Jul 2013 22:58:49 -0400 Subject: [PATCH] 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 --- src/pkg/runtime/malloc.goc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pkg/runtime/malloc.goc b/src/pkg/runtime/malloc.goc index 78535c61f0..24ead24c41 100644 --- a/src/pkg/runtime/malloc.goc +++ b/src/pkg/runtime/malloc.goc @@ -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 -- 2.48.1