diff --git a/context.go b/context.go index af747a1e..cc012ab0 100644 --- a/context.go +++ b/context.go @@ -79,7 +79,6 @@ func (c *Context) reset() { // This has to be used when the context has to be passed to a goroutine. func (c *Context) Copy() *Context { var cp = *c - cp.writermem.ResponseWriter = nil cp.Writer = &cp.writermem cp.index = abortIndex cp.handlers = nil diff --git a/context_test.go b/context_test.go index 490e4490..8d65b620 100644 --- a/context_test.go +++ b/context_test.go @@ -324,7 +324,6 @@ func TestContextCopy(t *testing.T) { cp := c.Copy() assert.Nil(t, cp.handlers) - assert.Nil(t, cp.writermem.ResponseWriter) assert.Equal(t, &cp.writermem, cp.Writer.(*responseWriter)) assert.Equal(t, cp.Request, c.Request) assert.Equal(t, cp.index, abortIndex) @@ -1821,3 +1820,29 @@ func TestContextResetInHandler(t *testing.T) { c.Next() }) } + +func TestContextStreamToCopyOfContext(t *testing.T) { + w := CreateTestResponseRecorder() + c, _ := CreateTestContext(w) + + h := func(c *Context) { + nc := c.Copy() + nc.Stream(func(w io.Writer) bool { + w.Write([]byte("1")) + return false + }) + c.String(http.StatusOK, "%s", "2") + w.closeClient() + + nc.Stream(func(w io.Writer) bool { + w.Write([]byte("3")) + return false + }) + } + + assert.NotPanics(t, func() { + h(c) + }) + + assert.Equal(t, "12", w.Body.String()) +}