summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pkg/runtime/malloc.cgo2
-rw-r--r--src/pkg/runtime/proc.c2
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)