1
0
mirror of https://github.com/golang/go synced 2024-11-25 09:07:58 -07:00

runtime: fix tiny memory leak

The m->cret word holds the C return value when returning
across a stack split boundary.  It was not being cleared after
use, which means that the return value (if a C function)
or else the value of AX/R0 at the time of the last stack unsplit
was being kept alive longer than necessary.  Clear it.

I think the effect here should be very small, but worth fixing
anyway.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5677092
This commit is contained in:
Russ Cox 2012-02-19 00:26:33 -05:00
parent efacb2a1b4
commit 89b075cc90

View File

@ -1011,6 +1011,7 @@ runtime·oldstack(void)
{
Stktop *top, old;
uint32 argsize;
uintptr cret;
byte *sp;
G *g1;
int32 goid;
@ -1034,7 +1035,9 @@ runtime·oldstack(void)
g1->stackbase = old.stackbase;
g1->stackguard = old.stackguard;
runtime·gogo(&old.gobuf, m->cret);
cret = m->cret;
m->cret = 0; // drop reference
runtime·gogo(&old.gobuf, cret);
}
// Called from reflect·call or from runtime·morestack when a new