Add known-failing test. Panic stack trace reported by Mathieu from Camlistore.
diff --git a/http2_test.go b/http2_test.go
index 9764e54..ca13018 100644
--- a/http2_test.go
+++ b/http2_test.go
@@ -21,6 +21,14 @@
 	"github.com/bradfitz/http2/hpack"
 )
 
+var knownFailing = flag.Bool("known_failing", false, "Run known-failing tests.")
+
+func condSkipFailingTest(t *testing.T) {
+	if !*knownFailing {
+		t.Skip("Skipping known-failing test without --known_failing")
+	}
+}
+
 func init() {
 	DebugGoroutines = true
 	flag.BoolVar(&VerboseLogs, "verboseh2", false, "Verbose HTTP/2 debug logging")
diff --git a/server_test.go b/server_test.go
index e293e75..0eea7cf 100644
--- a/server_test.go
+++ b/server_test.go
@@ -1804,6 +1804,38 @@
 	})
 }
 
+func TestServer_NoCrash_HandlerClose_Then_ClientClose(t *testing.T) {
+	condSkipFailingTest(t)
+	testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+		// nothing
+		return nil
+	}, func(st *serverTester) {
+		st.writeHeaders(HeadersFrameParam{
+			StreamID:      1,
+			BlockFragment: encodeHeader(st.t),
+			EndStream:     false, // DATA is coming
+			EndHeaders:    true,
+		})
+		hf := st.wantHeaders()
+		if !hf.HeadersEnded() || !hf.StreamEnded() {
+			t.Fatalf("want END_HEADERS+END_STREAM, got %v", hf)
+		}
+		// Now the handler has ended, so it's ended its
+		// stream, but the client hasn't closed its side
+		// (stateClosedLocal).  So send more data and verify
+		// it doesn't crash with an internal invariant panic, like
+		// it did before.
+		st.writeData(1, true, []byte("foo"))
+		st.cc.Close()
+		select {
+		case <-st.sc.doneServing:
+			// Loop has exited.
+		case <-time.After(5 * time.Second):
+			t.Error("timeout")
+		}
+	})
+}
+
 func decodeHeader(t *testing.T, headerBlock []byte) (pairs [][2]string) {
 	d := hpack.NewDecoder(initialHeaderTableSize, func(f hpack.HeaderField) {
 		pairs = append(pairs, [2]string{f.Name, f.Value})