From 8a4c2b3cc45edb4a263c775683947709e9b4c50d Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 19 Feb 2012 11:05:19 -0500 Subject: [PATCH] runtime: fix another memory leak morebuf holds a pc/sp from the last stack split or reflect.call or panic/recover. If the pc is a closure, the reference will keep it from being collected. moreargp holds a pointer to the arguments from the last stack split or reflect.call or panic/recover. Normally it is a stack pointer and thus not of interest, but in the case of reflect.call it is an allocated argument list and holds up the arguments to the call. R=golang-dev, r CC=golang-dev https://golang.org/cl/5674109 --- src/pkg/runtime/proc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index eaec093c85..d09f075327 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -1103,6 +1103,9 @@ runtime·newstack(void) top->argp = m->moreargp; top->argsize = argsize; top->free = free; + m->moreargp = nil; + m->morebuf.pc = nil; + m->morebuf.sp = nil; // copy flag from panic top->panic = g1->ispanic; @@ -1114,7 +1117,7 @@ runtime·newstack(void) sp = (byte*)top; if(argsize > 0) { sp -= argsize; - runtime·memmove(sp, m->moreargp, argsize); + runtime·memmove(sp, top->argp, argsize); } if(thechar == '5') { // caller would have saved its LR below args. -- 2.50.0