aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pkg/runtime/mgc0.c6
1 files changed, 5 insertions, 1 deletions
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;