aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/malloc.goc
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2014-03-26 15:11:36 +0400
committerDmitriy Vyukov <dvyukov@google.com>2014-03-26 15:11:36 +0400
commitf8c350873c94baaf53b9c1c2b6ddfb463172c3de (patch)
tree2bf67d8b9dc3ba79f83022a433d8dd606dcb5e00 /src/pkg/runtime/malloc.goc
parent40f5e67571d6ce299140638e40bea6b00cc76330 (diff)
downloadgo-f8c350873c94baaf53b9c1c2b6ddfb463172c3de.tar.xz
runtime: fix yet another race in bgsweep
Currently it's possible that bgsweep finishes before all spans have been swept (we only know that sweeping of all spans has *started*). In such case bgsweep may fail wake up runfinq goroutine when it needs to. finq may still be nil at this point, but some finalizers may be queued later. Make bgsweep to wait for sweeping to *complete*, then it can decide whether it needs to wake up runfinq for sure. Update #7533 LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/75960043
Diffstat (limited to 'src/pkg/runtime/malloc.goc')
-rw-r--r--src/pkg/runtime/malloc.goc1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/pkg/runtime/malloc.goc b/src/pkg/runtime/malloc.goc
index 03062adbbd..104b0f18c7 100644
--- a/src/pkg/runtime/malloc.goc
+++ b/src/pkg/runtime/malloc.goc
@@ -893,6 +893,7 @@ func SetFinalizer(obj Eface, finalizer Eface) {
}
}
if(finalizer.type != nil) {
+ runtime·createfing();
if(finalizer.type->kind != KindFunc)
goto badfunc;
ft = (FuncType*)finalizer.type;