diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pkg/runtime/malloc.cgo | 2 | ||||
-rw-r--r-- | src/pkg/runtime/proc.c | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/src/pkg/runtime/malloc.cgo b/src/pkg/runtime/malloc.cgo index 948257973..a85c39d83 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 6324b4be4..99fa26ad0 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) |