From 36ee4bd36b7c93237f49fb431cb645969ed7d00f Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Mon, 24 Jul 2017 18:10:09 +0700 Subject: [PATCH] Revert "use a finalizer to close the h2quic.RoundTripper" This reverts commit 65cea185bd1762e73a4111e440b9b27d895a4994. The finalizer may run even before the h2quic.RoundTripper variable falls out of scope. This can result in closing the session before a HTTP transfer has completed. --- h2quic/roundtrip.go | 7 ------- h2quic/roundtrip_test.go | 12 ------------ 2 files changed, 19 deletions(-) diff --git a/h2quic/roundtrip.go b/h2quic/roundtrip.go index 6b195b6f6..e725ea7a9 100644 --- a/h2quic/roundtrip.go +++ b/h2quic/roundtrip.go @@ -11,8 +11,6 @@ import ( quic "github.com/lucas-clemente/quic-go" - "runtime" - "golang.org/x/net/lex/httplex" ) @@ -93,7 +91,6 @@ func (r *RoundTripper) getClient(hostname string) http.RoundTripper { defer r.mutex.Unlock() if r.clients == nil { - runtime.SetFinalizer(r, finalizer) r.clients = make(map[string]roundTripCloser) } @@ -105,10 +102,6 @@ func (r *RoundTripper) getClient(hostname string) http.RoundTripper { return client } -func finalizer(r *RoundTripper) { - _ = r.Close() -} - // Close closes the QUIC connections that this RoundTripper has used func (r *RoundTripper) Close() error { r.mutex.Lock() diff --git a/h2quic/roundtrip_test.go b/h2quic/roundtrip_test.go index 66e3eb8a7..b612d8bbf 100644 --- a/h2quic/roundtrip_test.go +++ b/h2quic/roundtrip_test.go @@ -6,7 +6,6 @@ import ( "errors" "io" "net/http" - "runtime" "time" quic "github.com/lucas-clemente/quic-go" @@ -197,16 +196,5 @@ var _ = Describe("RoundTripper", func() { Expect(err).ToNot(HaveOccurred()) Expect(len(rt.clients)).To(BeZero()) }) - - It("runs Close when the RoundTripper is garbage collected", func() { - // this is set by getClient, but we can't do that while at the same time injecting the mockClient - runtime.SetFinalizer(rt, finalizer) - rt.clients = make(map[string]roundTripCloser) - cl := &mockClient{} - rt.clients["foo.bar"] = cl - rt = nil // lose the references to the RoundTripper, such that it can be garbage collected - runtime.GC() - Eventually(func() bool { return cl.closed }).Should(BeTrue()) - }) }) })