From: Russ Cox Date: Tue, 12 Jan 2010 18:03:02 +0000 (-0800) Subject: runtime: fix bug in preemption checks; was causing "lock count" panics X-Git-Tag: weekly.2010-01-13~20 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=711088106e74e909f78a8139bd46501f39d13e7d;p=gostls13.git runtime: fix bug in preemption checks; was causing "lock count" panics R=r CC=golang-dev https://golang.org/cl/186078 --- diff --git a/src/pkg/runtime/malloc.cgo b/src/pkg/runtime/malloc.cgo index 948257973e..a85c39d83d 100644 --- a/src/pkg/runtime/malloc.cgo +++ b/src/pkg/runtime/malloc.cgo @@ -27,7 +27,7 @@ mallocgc(uintptr size, uint32 refflag, int32 dogc) void *v; uint32 *ref; - if(gcwaiting && g != m->g0) + if(gcwaiting && g != m->g0 && m->locks == 0) gosched(); if(m->mallocing) throw("malloc/free - deadlock"); diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index 6324b4be4c..99fa26ad0b 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -523,6 +523,8 @@ scheduler(void) void gosched(void) { + if(m->locks != 0) + throw("gosched holding locks"); if(g == m->g0) throw("gosched of g0"); if(gosave(&g->sched) == 0)