Commit eb04df75 authored by Dmitriy Vyukov's avatar Dmitriy Vyukov

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
parent e2425625
...@@ -2274,7 +2274,11 @@ runfinq(void) ...@@ -2274,7 +2274,11 @@ runfinq(void)
framesz = sizeof(uintptr) + f->nret; framesz = sizeof(uintptr) + f->nret;
if(framecap < framesz) { if(framecap < framesz) {
runtime·free(frame); 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; framecap = framesz;
} }
*(void**)frame = f->arg; *(void**)frame = f->arg;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment