]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/race: fix memory leak
authorDmitry Vyukov <dvyukov@google.com>
Wed, 20 Jul 2016 11:52:03 +0000 (13:52 +0200)
committerDmitry Vyukov <dvyukov@google.com>
Wed, 20 Jul 2016 14:17:44 +0000 (14:17 +0000)
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 <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Run-TryBot: Dmitry Vyukov <dvyukov@google.com>

src/runtime/race/README
src/runtime/race/race_darwin_amd64.syso
src/runtime/race/race_freebsd_amd64.syso
src/runtime/race/race_linux_amd64.syso
src/runtime/race/race_test.go
src/runtime/race/race_windows_amd64.syso

index 3a506b0c08896f3312622deba4280def26e7fffc..95e241c072c2b47cbd6e4b37a4b2b38cfda9107f 100644 (file)
@@ -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.
index 1822486e08df18db87efbcfb4c110a414eef4941..c19740fb8f2cad61854cfc0a9049400fd010d819 100644 (file)
Binary files a/src/runtime/race/race_darwin_amd64.syso and b/src/runtime/race/race_darwin_amd64.syso differ
index 75d94952c341f435ee668055b47a6496e0854b4f..df1bc26861af9090a26b35d4bf1422ae19c2d6d9 100644 (file)
Binary files a/src/runtime/race/race_freebsd_amd64.syso and b/src/runtime/race/race_freebsd_amd64.syso differ
index 8f571afa9a7db032ccfb06e76cea99445801148b..174033041ed4a6f584e7b74f13194244dea7e9cc 100644 (file)
Binary files a/src/runtime/race/race_linux_amd64.syso and b/src/runtime/race/race_linux_amd64.syso differ
index 81e51cc5b299a66453e591e17005de1050b8fe61..53ec74c085678eb6de236e1c13541e8fce5d29ce 100644 (file)
@@ -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)
+}
index 64c54b6e2fa7ee3e90d95cf0b80c887f1fbd9453..fd93959af5eb78d1903adaa712ab21224cf8580e 100644 (file)
Binary files a/src/runtime/race/race_windows_amd64.syso and b/src/runtime/race/race_windows_amd64.syso differ