diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2016-07-20 13:52:03 +0200 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2016-07-20 14:17:44 +0000 |
commit | d73ca5f4d8f6aef0c2e738cd1614d4dbf87735fb (patch) | |
tree | 68547831b981950e5d2515100c4eb692108a58bc | |
parent | 50048a4e8ee11016227c283be2d073e14e1c006b (diff) | |
download | go-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/README | 2 | ||||
-rw-r--r-- | src/runtime/race/race_darwin_amd64.syso | bin | 341304 -> 326172 bytes | |||
-rw-r--r-- | src/runtime/race/race_freebsd_amd64.syso | bin | 399904 -> 404216 bytes | |||
-rw-r--r-- | src/runtime/race/race_linux_amd64.syso | bin | 371032 -> 376048 bytes | |||
-rw-r--r-- | src/runtime/race/race_test.go | 18 | ||||
-rw-r--r-- | src/runtime/race/race_windows_amd64.syso | bin | 363595 -> 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 Binary files differindex 1822486e08..c19740fb8f 100644 --- a/src/runtime/race/race_darwin_amd64.syso +++ b/src/runtime/race/race_darwin_amd64.syso diff --git a/src/runtime/race/race_freebsd_amd64.syso b/src/runtime/race/race_freebsd_amd64.syso Binary files differindex 75d94952c3..df1bc26861 100644 --- a/src/runtime/race/race_freebsd_amd64.syso +++ b/src/runtime/race/race_freebsd_amd64.syso diff --git a/src/runtime/race/race_linux_amd64.syso b/src/runtime/race/race_linux_amd64.syso Binary files differindex 8f571afa9a..174033041e 100644 --- a/src/runtime/race/race_linux_amd64.syso +++ b/src/runtime/race/race_linux_amd64.syso 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 Binary files differindex 64c54b6e2f..fd93959af5 100644 --- a/src/runtime/race/race_windows_amd64.syso +++ b/src/runtime/race/race_windows_amd64.syso |