aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-07-20 13:52:03 +0200
committerDmitry Vyukov <dvyukov@google.com>2016-07-20 14:17:44 +0000
commitd73ca5f4d8f6aef0c2e738cd1614d4dbf87735fb (patch)
tree68547831b981950e5d2515100c4eb692108a58bc
parent50048a4e8ee11016227c283be2d073e14e1c006b (diff)
downloadgo-d73ca5f4d8f6aef0c2e738cd1614d4dbf87735fb.tar.gz
go-d73ca5f4d8f6aef0c2e738cd1614d4dbf87735fb.zip
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 <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>
-rw-r--r--src/runtime/race/README2
-rw-r--r--src/runtime/race/race_darwin_amd64.sysobin341304 -> 326172 bytes
-rw-r--r--src/runtime/race/race_freebsd_amd64.sysobin399904 -> 404216 bytes
-rw-r--r--src/runtime/race/race_linux_amd64.sysobin371032 -> 376048 bytes
-rw-r--r--src/runtime/race/race_test.go18
-rw-r--r--src/runtime/race/race_windows_amd64.sysobin363595 -> 367717 bytes
6 files changed, 19 insertions, 1 deletions
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
--- a/src/runtime/race/race_darwin_amd64.syso
+++ b/src/runtime/race/race_darwin_amd64.syso
Binary files differ
diff --git a/src/runtime/race/race_freebsd_amd64.syso b/src/runtime/race/race_freebsd_amd64.syso
index 75d94952c3..df1bc26861 100644
--- a/src/runtime/race/race_freebsd_amd64.syso
+++ b/src/runtime/race/race_freebsd_amd64.syso
Binary files differ
diff --git a/src/runtime/race/race_linux_amd64.syso b/src/runtime/race/race_linux_amd64.syso
index 8f571afa9a..174033041e 100644
--- a/src/runtime/race/race_linux_amd64.syso
+++ b/src/runtime/race/race_linux_amd64.syso
Binary files 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
--- a/src/runtime/race/race_windows_amd64.syso
+++ b/src/runtime/race/race_windows_amd64.syso
Binary files differ