1
0
mirror of https://github.com/golang/go synced 2024-11-21 22:14:41 -07:00

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
This commit is contained in:
Russ Cox 2012-02-19 11:05:19 -05:00
parent 4e3f8e915f
commit 8a4c2b3cc4

View File

@ -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.