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:
parent
4e3f8e915f
commit
8a4c2b3cc4
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user