From 3cf83c182af504bcffb82f3fc78a0c8b0ffb3aaa Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Mon, 30 Jun 2014 19:48:08 -0700 Subject: undo CL 104200047 / 318b04f28372 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Breaks windows and race detector. TBR=rsc ««« original CL description runtime: stack allocator, separate from mallocgc In order to move malloc to Go, we need to have a separate stack allocator. If we run out of stack during malloc, malloc will not be available to allocate a new stack. Stacks are the last remaining FlagNoGC objects in the GC heap. Once they are out, we can get rid of the distinction between the allocated/blockboundary bits. (This will be in a separate change.) Fixes #7468 Fixes #7424 LGTM=rsc, dvyukov R=golang-codereviews, dvyukov, khr, dave, rsc CC=golang-codereviews https://golang.org/cl/104200047 »»» TBR=rsc CC=golang-codereviews https://golang.org/cl/101570044 --- src/pkg/runtime/stack_test.go | 49 ------------------------------------------- 1 file changed, 49 deletions(-) (limited to 'src/pkg/runtime/stack_test.go') diff --git a/src/pkg/runtime/stack_test.go b/src/pkg/runtime/stack_test.go index 424a15b3e5..f0c599ac5d 100644 --- a/src/pkg/runtime/stack_test.go +++ b/src/pkg/runtime/stack_test.go @@ -281,52 +281,3 @@ func TestDeferPtrs(t *testing.T) { defer set(&y, 42) growStack() } - -// use about n KB of stack -func useStack(n int) { - if n == 0 { - return - } - var b [1024]byte // makes frame about 1KB - useStack(n - 1 + int(b[99])) -} - -func growing(c chan int, done chan struct{}) { - for n := range c { - useStack(n) - done <- struct{}{} - } - done <- struct{}{} -} - -func TestStackCache(t *testing.T) { - // Allocate a bunch of goroutines and grow their stacks. - // Repeat a few times to test the stack cache. - const ( - R = 4 - G = 200 - S = 5 - ) - for i := 0; i < R; i++ { - var reqchans [G]chan int - done := make(chan struct{}) - for j := 0; j < G; j++ { - reqchans[j] = make(chan int) - go growing(reqchans[j], done) - } - for s := 0; s < S; s++ { - for j := 0; j < G; j++ { - reqchans[j] <- 1 << uint(s) - } - for j := 0; j < G; j++ { - <-done - } - } - for j := 0; j < G; j++ { - close(reqchans[j]) - } - for j := 0; j < G; j++ { - <-done - } - } -} -- cgit v1.3