1
0
mirror of https://github.com/golang/go synced 2024-11-22 01:34:41 -07:00

runtime: fix memory leak in parallel garbage collector

The work buffer management used by the garbage
collector during parallel collections leaks buffers.
This CL tests for and fixes the leak.

R=golang-dev, dvyukov, r
CC=golang-dev
https://golang.org/cl/5254059
This commit is contained in:
Russ Cox 2011-10-12 13:23:34 -04:00
parent af1232fe38
commit 8219cc9af8
3 changed files with 29 additions and 1 deletions

View File

@ -0,0 +1,24 @@
package runtime_test
import (
"runtime"
"testing"
)
func TestGcSys(t *testing.T) {
for i := 0; i < 1000000; i++ {
workthegc()
}
// Should only be using a few MB.
runtime.UpdateMemStats()
sys := runtime.MemStats.Sys
t.Logf("using %d MB", sys>>20)
if sys > 10e6 {
t.Fatalf("using too much memory: %d MB", sys>>20)
}
}
func workthegc() []byte {
return make([]byte, 1029)
}

View File

@ -501,7 +501,7 @@ putempty(Workbuf *b)
runtime·lock(&work.emu);
b->next = work.empty;
work.empty = b->next;
work.empty = b;
runtime·unlock(&work.emu);
}

View File

@ -41,6 +41,10 @@ fi
gomake testshort
) || exit $?
(xcd pkg/runtime;
gotest -short -cpu=1,2,4
) || exit $?
(xcd pkg/sync;
GOMAXPROCS=10 gomake testshort
) || exit $?