|
|
Created:
12 years, 5 months ago by bradfitz Modified:
12 years, 5 months ago Reviewers:
remyoudompheng CC:
dave_cheney.net, bradfitz, Dustin, rsc, albert.strasheim, golang-dev Visibility:
Public. |
Descriptionnet/http: fix Transport races & deadlocks
Thanks to Dustin Sallings for exposing the most frustrating
bug ever, and for providing repro cases (which formed the
basis of the new tests in this CL), and to Dave Cheney and
Dmitry Vyukov for help debugging and fixing.
This CL depends on submited pollster CLs ffd1e075c260 (Unix)
and 14b544194509 (Windows), as well as unsubmitted 6852085.
Some operating systems (OpenBSD, NetBSD, ?) may still require
more pollster work, fixing races (Issue 4434 and
http://goo.gl/JXB6W).
Tested on linux-amd64 and darwin-amd64, both with GOMAXPROCS 1
and 4 (all combinations of which previously failed differently)
Fixes Issue 4191
Update Issue 4434 (related fallout from this bug)
Patch Set 1 #Patch Set 2 : diff -r 13d81e48dc90 https://go.googlecode.com/hg/ #Patch Set 3 : diff -r 2524ef4a77b4 https://go.googlecode.com/hg/ #Patch Set 4 : diff -r b96491ad23fd https://go.googlecode.com/hg/ #Patch Set 5 : diff -r b96491ad23fd https://go.googlecode.com/hg/ #Patch Set 6 : diff -r b96491ad23fd https://go.googlecode.com/hg/ #
Total comments: 1
Patch Set 7 : diff -r b96491ad23fd https://go.googlecode.com/hg/ #
Total comments: 1
Patch Set 8 : diff -r ffd1e075c260 https://go.googlecode.com/hg/ #
Total comments: 1
Patch Set 9 : diff -r cda840e2befc https://go.googlecode.com/hg/ #
Total comments: 9
Patch Set 10 : diff -r 03a6b8c9c396 https://go.googlecode.com/hg/ #Patch Set 11 : diff -r 81b14ef2226a https://go.googlecode.com/hg/ #
MessagesTotal messages: 31
I'm not sure if I fixed the problem, or just fixed the test, but with this small change the test passes for me. However I was hacking a lot on transport{,_test}.go so maybe it just works on my computer (tm) https://codereview.appspot.com/6851061/diff/9002/src/pkg/net/http/transport_t... File src/pkg/net/http/transport_test.go (right): https://codereview.appspot.com/6851061/diff/9002/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:977: } sres.Body.Close() sometimes I wonder if there should be an (optional) finaliser on response bodies that prints a warning if they fall out of scope without being closed.
Sign in to reply to this message.
You shouldn't have to modify the test. I believe the tests are all valid Go code. On Thu, Nov 22, 2012 at 4:46 AM, <dave@cheney.net> wrote: > I'm not sure if I fixed the problem, or just fixed the test, but with > this small change the test passes for me. However I was hacking a lot on > transport{,_test}.go so maybe it just works on my computer (tm) > > > https://codereview.appspot.**com/6851061/diff/9002/src/pkg/** > net/http/transport_test.go<https://codereview.appspot.com/6851061/diff/9002/src/pkg/net/http/transport_test.go> > File src/pkg/net/http/transport_**test.go (right): > > https://codereview.appspot.**com/6851061/diff/9002/src/pkg/** > net/http/transport_test.go#**newcode977<https://codereview.appspot.com/6851061/diff/9002/src/pkg/net/http/transport_test.go#newcode977> > src/pkg/net/http/transport_**test.go:977: } > sres.Body.Close() > > sometimes I wonder if there should be an (optional) finaliser on > response bodies that prints a warning if they fall out of scope without > being closed. > > https://codereview.appspot.**com/6851061/<https://codereview.appspot.com/6851... >
Sign in to reply to this message.
The documentation says you always need to close the response body, I think not doing this is causing the test to hang. On Fri, Nov 23, 2012 at 12:21 AM, Brad Fitzpatrick <bradfitz@golang.org> wrote: > You shouldn't have to modify the test. I believe the tests are all valid Go > code. > > > On Thu, Nov 22, 2012 at 4:46 AM, <dave@cheney.net> wrote: >> >> I'm not sure if I fixed the problem, or just fixed the test, but with >> this small change the test passes for me. However I was hacking a lot on >> transport{,_test}.go so maybe it just works on my computer (tm) >> >> >> >> https://codereview.appspot.com/6851061/diff/9002/src/pkg/net/http/transport_t... >> File src/pkg/net/http/transport_test.go (right): >> >> >> https://codereview.appspot.com/6851061/diff/9002/src/pkg/net/http/transport_t... >> src/pkg/net/http/transport_test.go:977: } >> sres.Body.Close() >> >> sometimes I wonder if there should be an (optional) finaliser on >> response bodies that prints a warning if they fall out of scope without >> being closed. >> >> https://codereview.appspot.com/6851061/ > >
Sign in to reply to this message.
The docs say that as a short way to say "get to the end". A read error should work too and cause the conn to close. Where do you think it's hanging? (I can see all the goroutines too and have stared at this for days, so I don't want to bias you with my debugging too much.) On Nov 22, 2012 5:24 AM, "Dave Cheney" <dave@cheney.net> wrote: > The documentation says you always need to close the response body, I > think not doing this is causing the test to hang. > > On Fri, Nov 23, 2012 at 12:21 AM, Brad Fitzpatrick <bradfitz@golang.org> > wrote: > > You shouldn't have to modify the test. I believe the tests are all > valid Go > > code. > > > > > > On Thu, Nov 22, 2012 at 4:46 AM, <dave@cheney.net> wrote: > >> > >> I'm not sure if I fixed the problem, or just fixed the test, but with > >> this small change the test passes for me. However I was hacking a lot on > >> transport{,_test}.go so maybe it just works on my computer (tm) > >> > >> > >> > >> > https://codereview.appspot.com/6851061/diff/9002/src/pkg/net/http/transport_t... > >> File src/pkg/net/http/transport_test.go (right): > >> > >> > >> > https://codereview.appspot.com/6851061/diff/9002/src/pkg/net/http/transport_t... > >> src/pkg/net/http/transport_test.go:977: } > >> sres.Body.Close() > >> > >> sometimes I wonder if there should be an (optional) finaliser on > >> response bodies that prints a warning if they fall out of scope without > >> being closed. > >> > >> https://codereview.appspot.com/6851061/ > > > > >
Sign in to reply to this message.
Hello dave@cheney.net, bradfitz@golang.org, dsallings@gmail.com (cc: golang-dev@googlegroups.com), I'd like you to review this change to https://go.googlecode.com/hg/
Sign in to reply to this message.
Whoops, I thought this would only mail Dave & Dustin. But this more of the mystery, adding a net test (which is fine) and fixing the server conn logging to have unique prefixes. No other changes. On Thu, Nov 22, 2012 at 7:15 AM, <bradfitz@golang.org> wrote: > Hello dave@cheney.net, bradfitz@golang.org, dsallings@gmail.com (cc: > golang-dev@googlegroups.com), > > I'd like you to review this change to > https://go.googlecode.com/hg/ > > > http://codereview.appspot.com/**6851061/<http://codereview.appspot.com/6851061/> >
Sign in to reply to this message.
https://codereview.appspot.com/6851061/diff/6014/src/pkg/net/http/transport_t... File src/pkg/net/http/transport_test.go (right): https://codereview.appspot.com/6851061/diff/6014/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:977: } Hi Brad, Just to humor me, can you please add sres.Body.Close() here For me, reapplying this patch cleanly, and making the change above it passes, _but_ you have to have a GOMAXPROCS > 1, which also implies a bug somewhere else.
Sign in to reply to this message.
Hello dave@cheney.net, bradfitz@golang.org, dsallings@gmail.com (cc: golang-dev@googlegroups.com), Please take another look.
Sign in to reply to this message.
https://codereview.appspot.com/6851061/diff/8005/src/pkg/net/http/transport_t... File src/pkg/net/http/transport_test.go (right): https://codereview.appspot.com/6851061/diff/8005/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:971: defer ts.Close() There is a deadlock here, ts.Close calls wg.Wait() which waits for all the connections through this server to close, but they won't ever close because this defer is not being called during the exit of the function, but during a panic Replacing this line with err := recover() if err != nil { t.Fatalf("Panic: %v", err) } ts.Close() }() Gives === RUN TestIssue3644-29 --- PASS: TestIssue3644-29 (0.01 seconds) === RUN TestIssue3595-29 --- PASS: TestIssue3595-29 (0.00 seconds) === RUN TestIssue4191_InfiniteGetTimeout-29 read tcp 127.0.0.1:46262: i/o timeout read tcp 127.0.0.1:46262: i/o timeout --- FAIL: TestIssue4191_InfiniteGetTimeout-29 (0.30 seconds) transport_test.go:914: Panic: runtime error: slice bounds out of range === RUN TestIssue4191_InfiniteGetToPutTimeout-29 --- FAIL: TestIssue4191_InfiniteGetToPutTimeout-29 (0.20 seconds) transport_test.go:1016: Unexpected successful PUT transport_test.go:980: Panic: runtime error: slice bounds out of range And the test always exits
Sign in to reply to this message.
goroutine 16 [semacquire]: sync.runtime_Semacquire(0xc2000bb3f8, 0xc2000bb3f8) /home/dfc/go/src/pkg/runtime/zsema_linux_amd64.c:165 +0x2e sync.(*WaitGroup).Wait(0xc20010d0d0, 0x0) /home/dfc/go/src/pkg/sync/waitgroup.go:102 +0xf2 net/http/httptest.(*Server).Close(0xc20010d0a0, 0x6cc8a0) /home/dfc/go/src/pkg/net/http/httptest/server.go:157 +0x41 net/http_test.func·105(0x7ff0de2d2f38, 0x7ff0de2d2100) /home/dfc/go/src/pkg/net/http/transport_test.go:916 +0x46 ----- stack segment boundary ----- bufio.(*Reader).Read(0xc20015d1e0, 0xc2000dd920, 0x2, 0x2, 0xffffffffffffffff, ...) /home/dfc/go/src/pkg/bufio/bufio.go:151 +0x303 io.ReadAtLeast(0xc200129cf0, 0xc20015d1e0, 0xc2000dd920, 0x2, 0x2, ...) /home/dfc/go/src/pkg/io/io.go:271 +0x102 io.ReadFull(0xc200129cf0, 0xc20015d1e0, 0xc2000dd920, 0x2, 0x2, ...) /home/dfc/go/src/pkg/io/io.go:290 +0x72 net/http.(*chunkedReader).Read(0xc2000dd900, 0xc200197000, 0x8000, 0x8000, 0x7008, ...) /home/dfc/go/src/pkg/net/http/chunked.go:77 +0x1dd net/http.(*body).Read(0xc2000f21c0, 0xc200197000, 0x8000, 0x8000, 0xff8, ...) /home/dfc/go/src/pkg/net/http/transfer.go:538 +0x9a net/http.(*bodyEOFSignal).Read(0xc2000dd930, 0xc200197000, 0x8000, 0x8000, 0xff8, ...) /home/dfc/go/src/pkg/net/http/transport.go:837 +0x1b8 io.Copy(0xc200088240, 0x0, 0xc200129090, 0xc2000dd930, 0x3f40ff8, ...) /home/dfc/go/src/pkg/io/io.go:365 +0x1c5 net/http_test.TestIssue4191_InfiniteGetTimeout(0xc20017f000, 0xc21ccd09c5) /home/dfc/go/src/pkg/net/http/transport_test.go:953 +0x35e testing.tRunner(0xc20017f000, 0x8ee700, 0x0, 0x0) /home/dfc/go/src/pkg/testing/testing.go:302 +0x6c created by testing.RunTests /home/dfc/go/src/pkg/testing/testing.go:409 +0x87b The stack segment boundary is the defer, the actual line that is panicing is bufio.Read, line 151
Sign in to reply to this message.
Hello dave@cheney.net, bradfitz@golang.org, dsallings@gmail.com (cc: golang-dev@googlegroups.com), Please take another look.
Sign in to reply to this message.
This is now ready for review. It just can't be submitted until Dave's -1 fix is in. On Nov 25, 2012 9:54 AM, <bradfitz@golang.org> wrote: > Hello dave@cheney.net, bradfitz@golang.org, dsallings@gmail.com (cc: > golang-dev@googlegroups.com), > > Please take another look. > > > http://codereview.appspot.com/**6851061/<http://codereview.appspot.com/6851061/> >
Sign in to reply to this message.
=== RUN TestIssue4191_InfiniteGetTimeout-18 --- PASS: TestIssue4191_InfiniteGetTimeout-18 (0.50 seconds) === RUN TestIssue4191_InfiniteGetToPutTimeout-18 jams (also -15 on this machine), which may be related to issue 4434. https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... File src/pkg/net/http/transport_test.go (right): https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:917: }() Or skip the defer and move ts.Close() to the end, then you get the full unabridged panic. https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:946: t.Errorf("Error issuing GET: %v", err) break after t.Errorf https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:956: } ts.Close() https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:976: }() Same as above
Sign in to reply to this message.
Hello dave@cheney.net, bradfitz@golang.org, dsallings@gmail.com (cc: golang-dev@googlegroups.com), Please take another look.
Sign in to reply to this message.
PTAL I can't reproduce any hang with any number of GOMAXPROCS (1, 4, 20), but that's just on my quad-core laptop. https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... File src/pkg/net/http/transport_test.go (right): https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:917: }() On 2012/11/26 00:08:31, dfc wrote: > Or skip the defer and move ts.Close() to the end, then you get the full > unabridged panic. Done. https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:946: t.Errorf("Error issuing GET: %v", err) On 2012/11/26 00:08:31, dfc wrote: > break after t.Errorf Done, even though I do like defers. https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:951: t.Errorf("Unexpected successful copy") and did a break here too. https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:956: } On 2012/11/26 00:08:31, dfc wrote: > ts.Close() Done. https://codereview.appspot.com/6851061/diff/9010/src/pkg/net/http/transport_t... src/pkg/net/http/transport_test.go:976: }() On 2012/11/26 00:08:31, dfc wrote: > Same as above Done.
Sign in to reply to this message.
> Done, even though I do like defers. So do I, but in this case the defer was interacting badly with the httptest.Server.Close() method. LGTM. I'm not sure if you want to wait for a fix for 4434, this test will break eventually for people like fullung and his stress testing box.
Sign in to reply to this message.
On Sun, Nov 25, 2012 at 4:25 PM, <dave@cheney.net> wrote: > Done, even though I do like defers. >> > > So do I, but in this case the defer was interacting badly with the > httptest.Server.Close() method. > Yeah. > LGTM. Be sure to put LGTMs on the first line of replies, up at the top before any quoted section, otherwise codereview.appspot.com and downstream tools don't see it. I'm not sure if you want to wait for a fix for 4434, this test > will break eventually for people like fullung and his stress testing > box. > I also plan to run all the Go unit tests on a ~bazillion machines with varying GOMAXPROCS soonish here, since I'm also getting sick of flakiness. So I'm fine committing this for now if you're cool with it (and want to give me a top-line LGTM). I also fixed Issue 4021 which should help fullung's machine anyway, so net positive maybe? :)
Sign in to reply to this message.
LGTM. This is my pkg stress testing script % more ~/stress.bash #!/bin/bash set -e go test -c PKG=$(basename $(pwd)) while true ; do export GOMAXPROCS=$[ 1 + $[ RANDOM % 128 ]] ./$PKG.test $@ 2>&1 done % cd $PKG % bash ~/stress.bash $TEST_OPTIONS On Mon, Nov 26, 2012 at 11:33 AM, Brad Fitzpatrick <bradfitz@golang.org> wrote: > On Sun, Nov 25, 2012 at 4:25 PM, <dave@cheney.net> wrote: >>> >>> Done, even though I do like defers. >> >> >> So do I, but in this case the defer was interacting badly with the >> httptest.Server.Close() method. > > > Yeah. > >> >> LGTM. > > > Be sure to put LGTMs on the first line of replies, up at the top before any > quoted section, otherwise codereview.appspot.com and downstream tools don't > see it. > >> I'm not sure if you want to wait for a fix for 4434, this test >> will break eventually for people like fullung and his stress testing >> box. > > > I also plan to run all the Go unit tests on a ~bazillion machines with > varying GOMAXPROCS soonish here, since I'm also getting sick of flakiness. > So I'm fine committing this for now if you're cool with it (and want to give > me a top-line LGTM). I also fixed Issue 4021 which should help fullung's > machine anyway, so net positive maybe? :) >
Sign in to reply to this message.
NOT LGTM. Sorry, even simple tests in net/http are failing lucky(~/go/src) % go test net/http Warning: intentional death for testing --- FAIL: TestHandlerPanic (5.00 seconds) serve_test.go:978: expected an error serve_test.go:985: expected server handler to log an error Warning: intentional death for testing --- FAIL: TestHandlerPanicWithHijack (5.00 seconds) serve_test.go:985: expected server handler to log an error FAIL FAIL net/http 18.997s
Sign in to reply to this message.
On Sun, Nov 25, 2012 at 4:41 PM, <dave@cheney.net> wrote: > NOT LGTM. > > Sorry, even simple tests in net/http are failing > I can't reproduce any failures. Do you have any local modifications besides 03a6b8c9c396 + 6851061?
Sign in to reply to this message.
LGTM. Very sorry, I had some leftover debugging in net/http/httptest. PASS ok net/http 8.499s On Mon, Nov 26, 2012 at 11:44 AM, Brad Fitzpatrick <bradfitz@golang.org> wrote: > On Sun, Nov 25, 2012 at 4:41 PM, <dave@cheney.net> wrote: >> >> NOT LGTM. >> >> Sorry, even simple tests in net/http are failing > > > I can't reproduce any failures. > > Do you have any local modifications besides 03a6b8c9c396 + 6851061?
Sign in to reply to this message.
I'll wait on submitting this for a bit. I'm still seeing the same GetToPut hang you did, if I run it in a loop for a bit. I'd like to see a test which makes that hang more reliable, too. On Sun, Nov 25, 2012 at 4:46 PM, Dave Cheney <dave@cheney.net> wrote: > LGTM. Very sorry, I had some leftover debugging in net/http/httptest. > > PASS > ok net/http 8.499s > > > On Mon, Nov 26, 2012 at 11:44 AM, Brad Fitzpatrick <bradfitz@golang.org> > wrote: > > On Sun, Nov 25, 2012 at 4:41 PM, <dave@cheney.net> wrote: > >> > >> NOT LGTM. > >> > >> Sorry, even simple tests in net/http are failing > > > > > > I can't reproduce any failures. > > > > Do you have any local modifications besides 03a6b8c9c396 + 6851061? >
Sign in to reply to this message.
LGTM as long as dfc is happy
Sign in to reply to this message.
Hello On Monday, November 26, 2012 2:33:44 AM UTC+2, Brad Fitzpatrick wrote: > > I also plan to run all the Go unit tests on a ~bazillion machines with > varying GOMAXPROCS soonish here, since I'm also getting sick of flakiness. > So I'm fine committing this for now if you're cool with it (and want to > give me a top-line LGTM). I also fixed Issue 4021 which should help > fullung's machine anyway, so net positive maybe? :) > I'm waiting for the dust to settle a bit before I start reporting on test results from the infamous machine again. There is a minor enhancement to the Go test options that might be useful for a "test-driven bug data mining" effort: Allow some kind of random seed that is used to select a random subset of the Test* functions matched by -run=... and run them in random order with a random number of repetitions, maybe varying GOMAXPROCS between runs too. Seed=0 can be the default, which gives the current behaviour of running everything that matches -test.run=... once. Seed<0 can mean choose a random seed, which should be printed if -test.v is specified, to allow easier reproduction in case of a failure. This is especially useful if you farm out .test binaries to a big group of machines. And you can farm out normal and -race versions. There are a few tests that might bang into "too many sockets in TIME_WAIT" type problems, but mostly it seems that tests should continue to pass under this extended condition. Those that don't can probably be fixed. My hope is that this can shake out issues like http://code.google.com/p/go/issues/detail?id=4423 which I suspect has been lurking for quite a long time. Cheers Albert
Sign in to reply to this message.
Okay, I'll submit this now, since Albert is waiting on reporting high GOMAXPROCS errors, dfc is working on the net deadline races and LGTMed, and none of our builders run with high GOMAXPROCS. And this fixes a long-standing bug that was biting Dustin Sallings (who reported Issue 4191). Forward progress.... On Mon, Nov 26, 2012 at 12:32 PM, <rsc@golang.org> wrote: > LGTM as long as dfc is happy > > > https://codereview.appspot.**com/6851061/<https://codereview.appspot.com/6851... >
Sign in to reply to this message.
Yup, worse case the -test.timeout=120 will recover the builder. On Tue, Nov 27, 2012 at 8:24 AM, Brad Fitzpatrick <bradfitz@golang.org> wrote: > Okay, I'll submit this now, since Albert is waiting on reporting high > GOMAXPROCS errors, dfc is working on the net deadline races and LGTMed, and > none of our builders run with high GOMAXPROCS. > > And this fixes a long-standing bug that was biting Dustin Sallings (who > reported Issue 4191). > > Forward progress.... > > > On Mon, Nov 26, 2012 at 12:32 PM, <rsc@golang.org> wrote: >> >> LGTM as long as dfc is happy >> >> >> https://codereview.appspot.com/6851061/ > >
Sign in to reply to this message.
*** Submitted as http://code.google.com/p/go/source/detail?r=be4b8f195c96 *** net/http: fix Transport races & deadlocks Thanks to Dustin Sallings for exposing the most frustrating bug ever, and for providing repro cases (which formed the basis of the new tests in this CL), and to Dave Cheney and Dmitry Vyukov for help debugging and fixing. This CL depends on submited pollster CLs ffd1e075c260 (Unix) and 14b544194509 (Windows), as well as unsubmitted 6852085. Some operating systems (OpenBSD, NetBSD, ?) may still require more pollster work, fixing races (Issue 4434 and http://goo.gl/JXB6W). Tested on linux-amd64 and darwin-amd64, both with GOMAXPROCS 1 and 4 (all combinations of which previously failed differently) Fixes Issue 4191 Update Issue 4434 (related fallout from this bug) R=dave, bradfitz, dsallings, rsc, fullung CC=golang-dev http://codereview.appspot.com/6851061
Sign in to reply to this message.
I got the following failure during all.bash on linux/arm but could not reproduce by running go test -short net/http by hand. Maybe it happened due to the high load during parallel testing of packages. Rémy. panic: test timed out goroutine 1108 [running]: testing.alarm() /storage/remy/go/src/pkg/testing/testing.go:477 +0x60 created by time.goFunc /storage/remy/go/src/pkg/time/sleep.go:96 +0x54 goroutine 1 [chan receive]: testing.RunTests(0x10c00, 0x410b58, 0x81, 0x81, 0x10986501, ...) /storage/remy/go/src/pkg/testing/testing.go:378 +0x6ec testing.Main(0x10c00, 0x410b58, 0x81, 0x81, 0x40be10, ...) /storage/remy/go/src/pkg/testing/testing.go:313 +0x68 main.main() net/http/_test/_testmain.go:311 +0x94 goroutine 2 [runnable]: created by runtime.main /storage/remy/go/src/pkg/runtime/proc.c:225 goroutine 3 [timer goroutine (idle)]: created by addtimer /storage/remy/go/src/pkg/runtime/ztime_linux_arm.c:73 goroutine 74 [select]: net/http.(*persistConn).writeLoop(0x109a95a0, 0x410c90) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 31 [syscall]: syscall.Syscall6() /storage/remy/go/src/pkg/syscall/asm_linux_arm.s:42 +0x8 syscall.EpollWait(0x7, 0x10989ea8, 0xa, 0xa, 0xffffffff, ...) /storage/remy/go/src/pkg/syscall/zsyscall_linux_arm.go:327 +0x90 net.(*pollster).WaitFD(0x10989ea0, 0x110c4620, 0x0, 0x0, 0x0, ...) /storage/remy/go/src/pkg/net/fd_linux.go:146 +0x154 net.(*pollServer).Run(0x110c4620, 0x0) /storage/remy/go/src/pkg/net/fd_unix.go:211 +0x138 created by net.newPollServer /storage/remy/go/src/pkg/net/newpollserver_unix.go:33 +0x328 goroutine 58 [select]: net/http.(*persistConn).writeLoop(0x10964eb0, 0x410ca8) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 89 [semacquire]: sync.runtime_Semacquire(0x110e3bd0, 0x110e3bd0) /storage/remy/go/src/pkg/runtime/zsema_linux_arm.c:165 +0x30 sync.(*Cond).Wait(0x110ebec4, 0xb4ae0e3c) /storage/remy/go/src/pkg/sync/cond.go:73 +0xd0 io.(*pipe).write(0x110ebe80, 0x109b8b90, 0x13, 0x50, 0x0, ...) /storage/remy/go/src/pkg/io/pipe.go:90 +0x1e8 io.(*PipeWriter).Write(0x110e3bb0, 0x109b8b90, 0x13, 0x50, 0x109b8b90, ...) /storage/remy/go/src/pkg/io/pipe.go:157 +0x54 net/http.(*populateResponse).Write(0x11110110, 0x109b8b90, 0x13, 0x50, 0x50101, ...) /storage/remy/go/src/pkg/net/http/filetransport.go:122 +0xa0 fmt.Fprintln(0x1110c6e0, 0x11110110, 0xb4ae0ea0, 0x1, 0x1, ...) /storage/remy/go/src/pkg/fmt/print.go:280 +0xb0 net/http.Error(0x1110c3e0, 0x11110110, 0x27c63c, 0x12, 0x194, ...) /storage/remy/go/src/pkg/net/http/server.go:748 +0x15c net/http.NotFound(0x1110c3e0, 0x11110110) /storage/remy/go/src/pkg/net/http/server.go:752 +0x50 net/http.serveFile(0x1110c3e0, 0x11110110, 0x11100540, 0x1110c280, 0x110e3d70, ...) /storage/remy/go/src/pkg/net/http/fs.go:327 +0x1a8 net/http.(*fileHandler).ServeHTTP(0x110e3b90, 0x1110c3e0, 0x11110110, 0x11100540, 0x0, ...) /storage/remy/go/src/pkg/net/http/fs.go:421 +0x1a4 net/http.func·003(0x110e3b90, 0x110e3ba0, 0x110e3b98, 0x410d2c) /storage/remy/go/src/pkg/net/http/filetransport.go:43 +0x74 created by net/http.fileTransport.RoundTrip /storage/remy/go/src/pkg/net/http/filetransport.go:45 +0xd0 goroutine 48 [select]: net/http.(*persistConn).writeLoop(0x109b8820, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 47 [chan receive]: net/http.(*persistConn).readLoop(0x109b8820, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 83 [finalizer wait]: created by runtime.gc /storage/remy/go/src/pkg/runtime/mgc0.c:961 goroutine 194 [chan receive]: net/http.(*persistConn).readLoop(0x109b8140, 0x410ea0) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 57 [chan receive]: net/http.(*persistConn).readLoop(0x10964eb0, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 73 [chan receive]: net/http.(*persistConn).readLoop(0x109a95a0, 0x76) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 113 [chan receive]: net/http.(*persistConn).readLoop(0x10e78320, 0x410d50) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 114 [select]: net/http.(*persistConn).writeLoop(0x10e78320, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 122 [select]: net/http.(*persistConn).writeLoop(0x10e78b90, 0x410d5c) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 132 [select]: net/http.(*persistConn).writeLoop(0x10e78c80, 0x410d68) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 116 [chan receive]: net/http.(*persistConn).readLoop(0x1111bc30, 0x109d4f18) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 117 [select]: net/http.(*persistConn).writeLoop(0x1111bc30, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 121 [chan receive]: net/http.(*persistConn).readLoop(0x10e78b90, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 131 [chan receive]: net/http.(*persistConn).readLoop(0x10e78c80, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 222 [select]: net/http.(*persistConn).writeLoop(0x10a52780, 0x109d49d0) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 221 [chan receive]: net/http.(*persistConn).readLoop(0x10a52780, 0x109d4468) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 195 [select]: net/http.(*persistConn).writeLoop(0x109b8140, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 299 [chan receive]: net/http.(*persistConn).readLoop(0x109a92d0, 0x410f48) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 273 [chan send]: net/http.func·009(0x110e3908, 0x110e3920, 0x110e3910, 0x110e3918, 0x0, ...) /storage/remy/go/src/pkg/net/http/server.go:1271 +0xc0 created by net/http.(*timeoutHandler).ServeHTTP /storage/remy/go/src/pkg/net/http/server.go:1272 +0x124 goroutine 305 [chan receive]: net/http.(*persistConn).readLoop(0x110bd690, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 306 [select]: net/http.(*persistConn).writeLoop(0x110bd690, 0x0) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 300 [select]: net/http.(*persistConn).writeLoop(0x109a92d0, 0x410fa8) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 1100 [semacquire]: sync.runtime_Semacquire(0x13bf7aa0, 0x13bf7aa0) /storage/remy/go/src/pkg/runtime/zsema_linux_arm.c:165 +0x30 sync.(*WaitGroup).Wait(0x14003768, 0x0) /storage/remy/go/src/pkg/sync/waitgroup.go:102 +0x11c net/http/httptest.(*Server).Close(0x14003750, 0x13aed700) /storage/remy/go/src/pkg/net/http/httptest/server.go:157 +0x68 net/http_test.TestIssue4191_InfiniteGetToPutTimeout(0x147e4900, 0xe) /storage/remy/go/src/pkg/net/http/transport_test.go:1006 +0x348 testing.tRunner(0x147e4900, 0x411140, 0x0) /storage/remy/go/src/pkg/testing/testing.go:301 +0xa8 created by testing.RunTests /storage/remy/go/src/pkg/testing/testing.go:377 +0x6cc goroutine 597 [syscall]: syscall.Syscall6() /storage/remy/go/src/pkg/syscall/asm_linux_arm.s:42 +0x8 syscall.EpollWait(0x33, 0x14359008, 0xa, 0xa, 0xffffffff, ...) /storage/remy/go/src/pkg/syscall/zsyscall_linux_arm.go:327 +0x90 net.(*pollster).WaitFD(0x14359000, 0x147c18c0, 0x0, 0x0, 0x0, ...) /storage/remy/go/src/pkg/net/fd_linux.go:146 +0x154 net.(*pollServer).Run(0x147c18c0, 0x13923930) /storage/remy/go/src/pkg/net/fd_unix.go:211 +0x138 created by net.newPollServer /storage/remy/go/src/pkg/net/newpollserver_unix.go:33 +0x328 goroutine 603 [syscall]: syscall.Syscall6() /storage/remy/go/src/pkg/syscall/asm_linux_arm.s:42 +0x8 syscall.EpollWait(0x35, 0x13d53008, 0xa, 0xa, 0xffffffff, ...) /storage/remy/go/src/pkg/syscall/zsyscall_linux_arm.go:327 +0x90 net.(*pollster).WaitFD(0x13d53000, 0x147da380, 0x0, 0x0, 0x0, ...) /storage/remy/go/src/pkg/net/fd_linux.go:146 +0x154 net.(*pollServer).Run(0x147da380, 0x13923930) /storage/remy/go/src/pkg/net/fd_unix.go:211 +0x138 created by net.newPollServer /storage/remy/go/src/pkg/net/newpollserver_unix.go:33 +0x328 goroutine 1104 [select]: net/http.(*persistConn).writeLoop(0x13bd7550, 0x13923930) /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 goroutine 1103 [chan receive]: net/http.(*persistConn).readLoop(0x13bd7550, 0x13923930) /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc created by net/http.(*Transport).getConn /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 goroutine 598 [syscall]: syscall.Syscall6() /storage/remy/go/src/pkg/syscall/asm_linux_arm.s:42 +0x8 syscall.EpollWait(0x34, 0x14064008, 0xa, 0xa, 0xffffffff, ...) /storage/remy/go/src/pkg/syscall/zsyscall_linux_arm.go:327 +0x90 net.(*pollster).WaitFD(0x14064000, 0x1482a5a0, 0x0, 0x0, 0x0, ...) /storage/remy/go/src/pkg/net/fd_linux.go:146 +0x154 net.(*pollServer).Run(0x1482a5a0, 0x0) /storage/remy/go/src/pkg/net/fd_unix.go:211 +0x138 created by net.newPollServer /storage/remy/go/src/pkg/net/newpollserver_unix.go:33 +0x328 goroutine 1102 [chan receive]: net.(*pollServer).WaitWrite(0x110c4620, 0x13d70070, 0x110c46e0, 0xb) /storage/remy/go/src/pkg/net/fd_unix.go:251 +0x68 net.(*netFD).Write(0x13d70070, 0x1408eff8, 0x7008, 0x7008, 0x0, ...) /storage/remy/go/src/pkg/net/fd_unix.go:553 +0x48c net.(*conn).Write(0x143f1670, 0x1408eff8, 0x7008, 0x7008, 0x10968000, ...) /storage/remy/go/src/pkg/net/net.go:129 +0xd0 net.(*TCPConn).Write(0x143f1670, 0x1408eff8, 0x7008, 0x7008, 0x8000, ...) /storage/remy/go/src/pkg/net/dial.go:0 +0x40 bufio.(*Writer).Write(0x13d63ea0, 0x1408eff8, 0x7008, 0x7008, 0xff8, ...) /storage/remy/go/src/pkg/bufio/bufio.go:488 +0xd0 net/http.(*response).Write(0x14003840, 0x1408e000, 0x8000, 0x8000, 0x8000, ...) /storage/remy/go/src/pkg/net/http/server.go:507 +0x468 net/http.(*writerOnly).Write(0x143f1a40, 0x1408e000, 0x8000, 0x8000, 0x8000, ...) /storage/remy/go/src/pkg/net/http/chunked.go:0 +0x74 io.Copy(0x109adb60, 0x143f1a40, 0x110c7500, 0x61, 0x3a8000, ...) /storage/remy/go/src/pkg/io/io.go:367 +0x25c net/http.(*response).ReadFrom(0x14003840, 0x110c7500, 0x61, 0x0, 0x0, ...) /storage/remy/go/src/pkg/net/http/server.go:167 +0x240 io.Copy(0x110d8260, 0x14003840, 0x110c7500, 0x61, 0x0, ...) /storage/remy/go/src/pkg/io/io.go:357 +0xa4 net/http_test.func·106(0x110d8220, 0x14003840) /storage/remy/go/src/pkg/net/http/transport_test.go:958 +0xa4 net/http.HandlerFunc.ServeHTTP(0xac6e8, 0x110d8220, 0x14003840, 0x13aed620, 0x26948c, ...) /storage/remy/go/src/pkg/net/http/server.go:739 +0x40 net/http.(*ServeMux).ServeHTTP(0x13d63e20, 0x110d8220, 0x14003840, 0x13aed620, 0x110d8d60, ...) /storage/remy/go/src/pkg/net/http/server.go:998 +0x74 net/http/httptest.(*waitGroupHandler).ServeHTTP(0x1464c7a0, 0x110d8220, 0x14003840, 0x13aed620, 0x0, ...) /storage/remy/go/src/pkg/net/http/httptest/server.go:189 +0xd0 net/http.(*conn).serve(0x13ff42d0, 0x0) /storage/remy/go/src/pkg/net/http/server.go:702 +0x604 created by net/http.(*Server).Serve /storage/remy/go/src/pkg/net/http/server.go:1126 +0x4cc FAIL net/http 120.229s
Sign in to reply to this message.
What value of GOMAXPROCS? goroutine 1102 in the stacks below is the sign of the expected failure for GOMAXPROCS > 1 until Issue 4434 is fixed. On Mon, Nov 26, 2012 at 2:34 PM, Rémy Oudompheng <remyoudompheng@gmail.com>wrote: > I got the following failure during all.bash on linux/arm but could not > reproduce by running go test -short net/http by hand. Maybe it > happened due to the high load during parallel testing of packages. > > Rémy. > > panic: test timed out > > goroutine 1108 [running]: > testing.alarm() > /storage/remy/go/src/pkg/testing/testing.go:477 +0x60 > created by time.goFunc > /storage/remy/go/src/pkg/time/sleep.go:96 +0x54 > > goroutine 1 [chan receive]: > testing.RunTests(0x10c00, 0x410b58, 0x81, 0x81, 0x10986501, ...) > /storage/remy/go/src/pkg/testing/testing.go:378 +0x6ec > testing.Main(0x10c00, 0x410b58, 0x81, 0x81, 0x40be10, ...) > /storage/remy/go/src/pkg/testing/testing.go:313 +0x68 > main.main() > net/http/_test/_testmain.go:311 +0x94 > > goroutine 2 [runnable]: > created by runtime.main > /storage/remy/go/src/pkg/runtime/proc.c:225 > > goroutine 3 [timer goroutine (idle)]: > created by addtimer > /storage/remy/go/src/pkg/runtime/ztime_linux_arm.c:73 > > goroutine 74 [select]: > net/http.(*persistConn).writeLoop(0x109a95a0, 0x410c90) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 31 [syscall]: > syscall.Syscall6() > /storage/remy/go/src/pkg/syscall/asm_linux_arm.s:42 +0x8 > syscall.EpollWait(0x7, 0x10989ea8, 0xa, 0xa, 0xffffffff, ...) > /storage/remy/go/src/pkg/syscall/zsyscall_linux_arm.go:327 +0x90 > net.(*pollster).WaitFD(0x10989ea0, 0x110c4620, 0x0, 0x0, 0x0, ...) > /storage/remy/go/src/pkg/net/fd_linux.go:146 +0x154 > net.(*pollServer).Run(0x110c4620, 0x0) > /storage/remy/go/src/pkg/net/fd_unix.go:211 +0x138 > created by net.newPollServer > /storage/remy/go/src/pkg/net/newpollserver_unix.go:33 +0x328 > > goroutine 58 [select]: > net/http.(*persistConn).writeLoop(0x10964eb0, 0x410ca8) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 89 [semacquire]: > sync.runtime_Semacquire(0x110e3bd0, 0x110e3bd0) > /storage/remy/go/src/pkg/runtime/zsema_linux_arm.c:165 +0x30 > sync.(*Cond).Wait(0x110ebec4, 0xb4ae0e3c) > /storage/remy/go/src/pkg/sync/cond.go:73 +0xd0 > io.(*pipe).write(0x110ebe80, 0x109b8b90, 0x13, 0x50, 0x0, ...) > /storage/remy/go/src/pkg/io/pipe.go:90 +0x1e8 > io.(*PipeWriter).Write(0x110e3bb0, 0x109b8b90, 0x13, 0x50, 0x109b8b90, ...) > /storage/remy/go/src/pkg/io/pipe.go:157 +0x54 > net/http.(*populateResponse).Write(0x11110110, 0x109b8b90, 0x13, 0x50, > 0x50101, ...) > /storage/remy/go/src/pkg/net/http/filetransport.go:122 +0xa0 > fmt.Fprintln(0x1110c6e0, 0x11110110, 0xb4ae0ea0, 0x1, 0x1, ...) > /storage/remy/go/src/pkg/fmt/print.go:280 +0xb0 > net/http.Error(0x1110c3e0, 0x11110110, 0x27c63c, 0x12, 0x194, ...) > /storage/remy/go/src/pkg/net/http/server.go:748 +0x15c > net/http.NotFound(0x1110c3e0, 0x11110110) > /storage/remy/go/src/pkg/net/http/server.go:752 +0x50 > net/http.serveFile(0x1110c3e0, 0x11110110, 0x11100540, 0x1110c280, > 0x110e3d70, ...) > /storage/remy/go/src/pkg/net/http/fs.go:327 +0x1a8 > net/http.(*fileHandler).ServeHTTP(0x110e3b90, 0x1110c3e0, 0x11110110, > 0x11100540, 0x0, ...) > /storage/remy/go/src/pkg/net/http/fs.go:421 +0x1a4 > net/http.func·003(0x110e3b90, 0x110e3ba0, 0x110e3b98, 0x410d2c) > /storage/remy/go/src/pkg/net/http/filetransport.go:43 +0x74 > created by net/http.fileTransport.RoundTrip > /storage/remy/go/src/pkg/net/http/filetransport.go:45 +0xd0 > > goroutine 48 [select]: > net/http.(*persistConn).writeLoop(0x109b8820, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 47 [chan receive]: > net/http.(*persistConn).readLoop(0x109b8820, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 83 [finalizer wait]: > created by runtime.gc > /storage/remy/go/src/pkg/runtime/mgc0.c:961 > > goroutine 194 [chan receive]: > net/http.(*persistConn).readLoop(0x109b8140, 0x410ea0) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 57 [chan receive]: > net/http.(*persistConn).readLoop(0x10964eb0, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 73 [chan receive]: > net/http.(*persistConn).readLoop(0x109a95a0, 0x76) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 113 [chan receive]: > net/http.(*persistConn).readLoop(0x10e78320, 0x410d50) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 114 [select]: > net/http.(*persistConn).writeLoop(0x10e78320, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 122 [select]: > net/http.(*persistConn).writeLoop(0x10e78b90, 0x410d5c) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 132 [select]: > net/http.(*persistConn).writeLoop(0x10e78c80, 0x410d68) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 116 [chan receive]: > net/http.(*persistConn).readLoop(0x1111bc30, 0x109d4f18) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 117 [select]: > net/http.(*persistConn).writeLoop(0x1111bc30, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 121 [chan receive]: > net/http.(*persistConn).readLoop(0x10e78b90, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 131 [chan receive]: > net/http.(*persistConn).readLoop(0x10e78c80, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 222 [select]: > net/http.(*persistConn).writeLoop(0x10a52780, 0x109d49d0) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 221 [chan receive]: > net/http.(*persistConn).readLoop(0x10a52780, 0x109d4468) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 195 [select]: > net/http.(*persistConn).writeLoop(0x109b8140, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 299 [chan receive]: > net/http.(*persistConn).readLoop(0x109a92d0, 0x410f48) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 273 [chan send]: > net/http.func·009(0x110e3908, 0x110e3920, 0x110e3910, 0x110e3918, 0x0, ...) > /storage/remy/go/src/pkg/net/http/server.go:1271 +0xc0 > created by net/http.(*timeoutHandler).ServeHTTP > /storage/remy/go/src/pkg/net/http/server.go:1272 +0x124 > > goroutine 305 [chan receive]: > net/http.(*persistConn).readLoop(0x110bd690, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 306 [select]: > net/http.(*persistConn).writeLoop(0x110bd690, 0x0) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 300 [select]: > net/http.(*persistConn).writeLoop(0x109a92d0, 0x410fa8) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 1100 [semacquire]: > sync.runtime_Semacquire(0x13bf7aa0, 0x13bf7aa0) > /storage/remy/go/src/pkg/runtime/zsema_linux_arm.c:165 +0x30 > sync.(*WaitGroup).Wait(0x14003768, 0x0) > /storage/remy/go/src/pkg/sync/waitgroup.go:102 +0x11c > net/http/httptest.(*Server).Close(0x14003750, 0x13aed700) > /storage/remy/go/src/pkg/net/http/httptest/server.go:157 +0x68 > net/http_test.TestIssue4191_InfiniteGetToPutTimeout(0x147e4900, 0xe) > /storage/remy/go/src/pkg/net/http/transport_test.go:1006 +0x348 > testing.tRunner(0x147e4900, 0x411140, 0x0) > /storage/remy/go/src/pkg/testing/testing.go:301 +0xa8 > created by testing.RunTests > /storage/remy/go/src/pkg/testing/testing.go:377 +0x6cc > > goroutine 597 [syscall]: > syscall.Syscall6() > /storage/remy/go/src/pkg/syscall/asm_linux_arm.s:42 +0x8 > syscall.EpollWait(0x33, 0x14359008, 0xa, 0xa, 0xffffffff, ...) > /storage/remy/go/src/pkg/syscall/zsyscall_linux_arm.go:327 +0x90 > net.(*pollster).WaitFD(0x14359000, 0x147c18c0, 0x0, 0x0, 0x0, ...) > /storage/remy/go/src/pkg/net/fd_linux.go:146 +0x154 > net.(*pollServer).Run(0x147c18c0, 0x13923930) > /storage/remy/go/src/pkg/net/fd_unix.go:211 +0x138 > created by net.newPollServer > /storage/remy/go/src/pkg/net/newpollserver_unix.go:33 +0x328 > > goroutine 603 [syscall]: > syscall.Syscall6() > /storage/remy/go/src/pkg/syscall/asm_linux_arm.s:42 +0x8 > syscall.EpollWait(0x35, 0x13d53008, 0xa, 0xa, 0xffffffff, ...) > /storage/remy/go/src/pkg/syscall/zsyscall_linux_arm.go:327 +0x90 > net.(*pollster).WaitFD(0x13d53000, 0x147da380, 0x0, 0x0, 0x0, ...) > /storage/remy/go/src/pkg/net/fd_linux.go:146 +0x154 > net.(*pollServer).Run(0x147da380, 0x13923930) > /storage/remy/go/src/pkg/net/fd_unix.go:211 +0x138 > created by net.newPollServer > /storage/remy/go/src/pkg/net/newpollserver_unix.go:33 +0x328 > > goroutine 1104 [select]: > net/http.(*persistConn).writeLoop(0x13bd7550, 0x13923930) > /storage/remy/go/src/pkg/net/http/transport.go:661 +0x238 > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:408 +0x5d8 > > goroutine 1103 [chan receive]: > net/http.(*persistConn).readLoop(0x13bd7550, 0x13923930) > /storage/remy/go/src/pkg/net/http/transport.go:650 +0x5bc > created by net/http.(*Transport).getConn > /storage/remy/go/src/pkg/net/http/transport.go:407 +0x5b0 > > goroutine 598 [syscall]: > syscall.Syscall6() > /storage/remy/go/src/pkg/syscall/asm_linux_arm.s:42 +0x8 > syscall.EpollWait(0x34, 0x14064008, 0xa, 0xa, 0xffffffff, ...) > /storage/remy/go/src/pkg/syscall/zsyscall_linux_arm.go:327 +0x90 > net.(*pollster).WaitFD(0x14064000, 0x1482a5a0, 0x0, 0x0, 0x0, ...) > /storage/remy/go/src/pkg/net/fd_linux.go:146 +0x154 > net.(*pollServer).Run(0x1482a5a0, 0x0) > /storage/remy/go/src/pkg/net/fd_unix.go:211 +0x138 > created by net.newPollServer > /storage/remy/go/src/pkg/net/newpollserver_unix.go:33 +0x328 > > goroutine 1102 [chan receive]: > net.(*pollServer).WaitWrite(0x110c4620, 0x13d70070, 0x110c46e0, 0xb) > /storage/remy/go/src/pkg/net/fd_unix.go:251 +0x68 > net.(*netFD).Write(0x13d70070, 0x1408eff8, 0x7008, 0x7008, 0x0, ...) > /storage/remy/go/src/pkg/net/fd_unix.go:553 +0x48c > net.(*conn).Write(0x143f1670, 0x1408eff8, 0x7008, 0x7008, 0x10968000, ...) > /storage/remy/go/src/pkg/net/net.go:129 +0xd0 > net.(*TCPConn).Write(0x143f1670, 0x1408eff8, 0x7008, 0x7008, 0x8000, ...) > /storage/remy/go/src/pkg/net/dial.go:0 +0x40 > bufio.(*Writer).Write(0x13d63ea0, 0x1408eff8, 0x7008, 0x7008, 0xff8, ...) > /storage/remy/go/src/pkg/bufio/bufio.go:488 +0xd0 > net/http.(*response).Write(0x14003840, 0x1408e000, 0x8000, 0x8000, 0x8000, > ...) > /storage/remy/go/src/pkg/net/http/server.go:507 +0x468 > net/http.(*writerOnly).Write(0x143f1a40, 0x1408e000, 0x8000, 0x8000, > 0x8000, ...) > /storage/remy/go/src/pkg/net/http/chunked.go:0 +0x74 > io.Copy(0x109adb60, 0x143f1a40, 0x110c7500, 0x61, 0x3a8000, ...) > /storage/remy/go/src/pkg/io/io.go:367 +0x25c > net/http.(*response).ReadFrom(0x14003840, 0x110c7500, 0x61, 0x0, 0x0, ...) > /storage/remy/go/src/pkg/net/http/server.go:167 +0x240 > io.Copy(0x110d8260, 0x14003840, 0x110c7500, 0x61, 0x0, ...) > /storage/remy/go/src/pkg/io/io.go:357 +0xa4 > net/http_test.func·106(0x110d8220, 0x14003840) > /storage/remy/go/src/pkg/net/http/transport_test.go:958 +0xa4 > net/http.HandlerFunc.ServeHTTP(0xac6e8, 0x110d8220, 0x14003840, > 0x13aed620, 0x26948c, ...) > /storage/remy/go/src/pkg/net/http/server.go:739 +0x40 > net/http.(*ServeMux).ServeHTTP(0x13d63e20, 0x110d8220, 0x14003840, > 0x13aed620, 0x110d8d60, ...) > /storage/remy/go/src/pkg/net/http/server.go:998 +0x74 > net/http/httptest.(*waitGroupHandler).ServeHTTP(0x1464c7a0, > 0x110d8220, 0x14003840, 0x13aed620, 0x0, ...) > /storage/remy/go/src/pkg/net/http/httptest/server.go:189 +0xd0 > net/http.(*conn).serve(0x13ff42d0, 0x0) > /storage/remy/go/src/pkg/net/http/server.go:702 +0x604 > created by net/http.(*Server).Serve > /storage/remy/go/src/pkg/net/http/server.go:1126 +0x4cc > FAIL net/http 120.229s >
Sign in to reply to this message.
On 2012/11/26 Brad Fitzpatrick <bradfitz@golang.org> wrote: > What value of GOMAXPROCS? goroutine 1102 in the stacks below is the sign of > the expected failure for GOMAXPROCS > 1 until Issue 4434 is fixed. I think it was GOMAXPROCS=1 since it was under all.bash and I don't have particular environment variables.
Sign in to reply to this message.
On Mon, Nov 26, 2012 at 2:47 PM, Rémy Oudompheng <remyoudompheng@gmail.com>wrote: > On 2012/11/26 Brad Fitzpatrick <bradfitz@golang.org> wrote: > > What value of GOMAXPROCS? goroutine 1102 in the stacks below is the sign > of > > the expected failure for GOMAXPROCS > 1 until Issue 4434 is fixed. > > I think it was GOMAXPROCS=1 since it was under all.bash and I don't > have particular environment variables. > It's likely the bug still exists with GOMAXPROCS=1 but is just hard to trigger on relatively fast machines, but your linux/arm triggers it more easily. FWIW, I couldn't reproduce that hang running the http tests in a loop on my linux-amd64 laptop with GOMAXPROCS=1, but it would happen after awhile on with GOMAXPROCS >1. I can disable the test if it's not fixed in the next day or so and is getting annoying.
Sign in to reply to this message.
|