From: Dmitry Vyukov Date: Wed, 20 Jul 2016 11:52:03 +0000 (+0200) Subject: runtime/race: fix memory leak X-Git-Tag: go1.7rc3~1^2~5 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d73ca5f4d8f6aef0c2e738cd1614d4dbf87735fb;p=gostls13.git runtime/race: fix memory leak The leak was reported internally on a sever canary that runs for days. After a day server consumes 5.6GB, after 6 days -- 12.2GB. The leak is exposed by the added benchmark. The leak is fixed upstream in : http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc?view=diff&r1=276102&r2=276103&pathrev=276103 Fixes #16441 Change-Id: I9d4f0adef48ca6cf2cd781b9a6990ad4661ba49b Reviewed-on: https://go-review.googlesource.com/25091 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Run-TryBot: Dmitry Vyukov --- diff --git a/src/runtime/race/README b/src/runtime/race/README index 3a506b0c08..95e241c072 100644 --- a/src/runtime/race/README +++ b/src/runtime/race/README @@ -4,4 +4,4 @@ the LLVM project (http://llvm.org/git/compiler-rt.git). To update the .syso files use golang.org/x/build/cmd/racebuild. -Current runtime is built on rev 9d79ea3416bfbe3acac50e47802ee9621bf53254. +Current runtime is built on rev e35e7c00b5c7e7ee5e24d537b80cb0d34cebb038. diff --git a/src/runtime/race/race_darwin_amd64.syso b/src/runtime/race/race_darwin_amd64.syso index 1822486e08..c19740fb8f 100644 Binary files a/src/runtime/race/race_darwin_amd64.syso and b/src/runtime/race/race_darwin_amd64.syso differ diff --git a/src/runtime/race/race_freebsd_amd64.syso b/src/runtime/race/race_freebsd_amd64.syso index 75d94952c3..df1bc26861 100644 Binary files a/src/runtime/race/race_freebsd_amd64.syso and b/src/runtime/race/race_freebsd_amd64.syso differ diff --git a/src/runtime/race/race_linux_amd64.syso b/src/runtime/race/race_linux_amd64.syso index 8f571afa9a..174033041e 100644 Binary files a/src/runtime/race/race_linux_amd64.syso and b/src/runtime/race/race_linux_amd64.syso differ diff --git a/src/runtime/race/race_test.go b/src/runtime/race/race_test.go index 81e51cc5b2..53ec74c085 100644 --- a/src/runtime/race/race_test.go +++ b/src/runtime/race/race_test.go @@ -221,3 +221,21 @@ func BenchmarkSyncLeak(b *testing.B) { } wg.Wait() } + +func BenchmarkStackLeak(b *testing.B) { + done := make(chan bool, 1) + for i := 0; i < b.N; i++ { + go func() { + growStack(rand.Intn(100)) + done <- true + }() + <-done + } +} + +func growStack(i int) { + if i == 0 { + return + } + growStack(i - 1) +} diff --git a/src/runtime/race/race_windows_amd64.syso b/src/runtime/race/race_windows_amd64.syso index 64c54b6e2f..fd93959af5 100644 Binary files a/src/runtime/race/race_windows_amd64.syso and b/src/runtime/race/race_windows_amd64.syso differ