From 50ba6e13b4b552117d4c9d966729eda1948e7a96 Mon Sep 17 00:00:00 2001 From: Carl Shapiro Date: Thu, 16 May 2013 10:42:39 -0700 Subject: [PATCH] runtime: fix scanning of not started goroutines The stack scanner for not started goroutines ignored the arguments area when its size was unknown. With this change, the distance between the stack pointer and the stack base will be used instead. Fixes #5486 R=golang-dev, bradfitz, iant, dvyukov CC=golang-dev https://golang.org/cl/9440043 --- src/pkg/runtime/mgc0.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pkg/runtime/mgc0.c b/src/pkg/runtime/mgc0.c index 2f26e31c3f..1124877253 100644 --- a/src/pkg/runtime/mgc0.c +++ b/src/pkg/runtime/mgc0.c @@ -1454,11 +1454,18 @@ addstackroots(G *gp) // be scanned. No other live values should be on the // stack. f = runtime·findfunc((uintptr)gp->fnstart->fn); - if(f->args > 0) { + if(f->args != 0) { if(thechar == '5') sp += sizeof(uintptr); - addroot((Obj){sp, f->args, 0}); - } + // If the size of the arguments is known + // scan just the incoming arguments. + // Otherwise, scan everything between the + // top and the bottom of the stack. + if(f->args > 0) + addroot((Obj){sp, f->args, 0}); + else + addroot((Obj){sp, (byte*)stk - sp, 0}); + } return; } } -- 2.48.1