From eb04df75cd87722f396fb66583279afe5abfb1ca Mon Sep 17 00:00:00 2001 From: Dmitriy Vyukov Date: Fri, 19 Jul 2013 18:01:33 +0400 Subject: [PATCH] runtime: prevent GC from seeing the contents of a frame in runfinq This holds the last finalized object and arguments to its finalizer. Fixes #5348. R=golang-dev, iant CC=golang-dev https://golang.org/cl/11454044 --- src/pkg/runtime/mgc0.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pkg/runtime/mgc0.c b/src/pkg/runtime/mgc0.c index f2c5939e0a..abf93e425b 100644 --- a/src/pkg/runtime/mgc0.c +++ b/src/pkg/runtime/mgc0.c @@ -2274,7 +2274,11 @@ runfinq(void) framesz = sizeof(uintptr) + f->nret; if(framecap < framesz) { runtime·free(frame); - frame = runtime·mal(framesz); + // The frame does not contain pointers interesting for GC, + // all not yet finalized objects are stored in finc. + // If we do not mark it as FlagNoPointers, + // the last finalized object is not collected. + frame = runtime·mallocgc(framesz, FlagNoPointers, 0, 1); framecap = framesz; } *(void**)frame = f->arg;