]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix another memory leak
authorRuss Cox <rsc@golang.org>
Sun, 19 Feb 2012 16:05:19 +0000 (11:05 -0500)
committerRuss Cox <rsc@golang.org>
Sun, 19 Feb 2012 16:05:19 +0000 (11:05 -0500)
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

index eaec093c857fe82ab78cf7381d723a1f21e95463..d09f0753276840b98ebc15efb50ee9e5d336d825 100644 (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.