From 89b075cc90f260edaa4973bd25258ee653a37a2f Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 19 Feb 2012 00:26:33 -0500 Subject: [PATCH] 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 --- 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 d9047c92c1..eaec093c85 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -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 -- 2.50.0