Skip to content

Panic in Timeout middleware is causing application to exit #1794

Closed
@maciej-jezierski

Description

@maciej-jezierski

I enable recently timeout middleware: https://echo.labstack.com/middleware/timeout for my testing server. I've noticed once it triggered application is going down.

Configuration

Version 4.2.0

e := echo.New()
	renderer := &Template{
		templates: template.Must(template.New("").Funcs(template.FuncMap{
			"safe": func(s string) template.HTMLAttr {
				return template.HTMLAttr(s)
			},
			"meta": func(s api.Tag) template.HTML {
				return template.HTML("<meta " + s.Key + "=\"" + s.Name + "\"  " + s.Type + "=\"" + s.Content + "\" data-vue-router-controlled />")
			},
		}).ParseGlob("web/dist/*.html")),
	}
	e.Renderer = renderer

	e.Pre(middleware.HTTPSRedirect())
	e.Pre(middleware.HTTPSNonWWWRedirect())
	e.Use(middleware.RemoveTrailingSlashWithConfig(middleware.TrailingSlashConfig{
		RedirectCode: http.StatusMovedPermanently,
	}))

	e.Use(middleware.Recover())
	e.Use(middleware.SecureWithConfig(middleware.SecureConfig{
		ReferrerPolicy: "no-referrer",
	}))
	e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
		Format: "method=${method}, uri=${uri}, status=${status}\n",
	}))
	e.Use(middleware.TimeoutWithConfig(middleware.TimeoutConfig{
		Timeout: 60 * time.Second,
	}))
	e.Logger.Fatal(e.StartTLS(":1323", "fullchain.pem", "privkey.pem"))

Stacktrace

panic: Write called after Handler finished

goroutine 12657 [running]:
net/http.(*http2responseWriter).write(0xc00056c840, 0x8000, 0xc00070e000, 0x8000, 0x8000, 0x0, 0x0, 0x8000, 0x8000, 0x0)
	/snap/go/7013/src/net/http/h2_bundle.go:6244 +0x1f7
net/http.(*http2responseWriter).Write(0xc00056c840, 0xc00070e000, 0x8000, 0x8000, 0xc00072f958, 0x4acf63, 0xc00056c858)
	/snap/go/7013/src/net/http/h2_bundle.go:6233 +0x56
github.com/labstack/echo/v4.(*Response).Write(0xc0005d0540, 0xc00070e000, 0x8000, 0x8000, 0x8000, 0x0, 0x0)
	/home/maciej/go/pkg/mod/github.com/labstack/echo/v4@v4.2.0/response.go:75 +0x69
io.copyBuffer(0xb63320, 0xc0005d0540, 0xb63580, 0xc0001b6ba0, 0xc00070e000, 0x8000, 0x8000, 0xa5c440, 0x0, 0xb63320)
	/snap/go/7013/src/io/io.go:411 +0x206
io.Copy(...)
	/snap/go/7013/src/io/io.go:368
io.CopyN(0xb63320, 0xc0005d0540, 0xb63b20, 0xc00056c858, 0x94104, 0x0, 0x0, 0x0)
	/snap/go/7013/src/io/io.go:344 +0x9a
net/http.serveContent(0xb6e860, 0xc0005d0540, 0xc0000b1a00, 0xc0001701ac, 0x10, 0x2d97886f, 0xed794cad9, 0xeca460, 0xc0004accb8, 0xb69780, ...)
	/snap/go/7013/src/net/http/fs.go:300 +0x2af
net/http.ServeContent(0xb6e860, 0xc0005d0540, 0xc0000b1a00, 0xc0001701ac, 0x10, 0x2d97886f, 0xed794cad9, 0xeca460, 0xb69780, 0xc00056c858)
	/snap/go/7013/src/net/http/fs.go:167 +0xd8
github.com/labstack/echo/v4.(*context).File(0xc0001cd360, 0xc000170180, 0x3c, 0x0, 0x0)
	/home/maciej/go/pkg/mod/github.com/labstack/echo/v4@v4.2.0/context.go:590 +0x1f4
webkomiksy.pl/m/api.pageImage(0xc00038e000, 0xb79e40, 0xc0001cd360, 0xc000673f50, 0x10, 0x0, 0x0)
	/home/maciej/projects/website/api/image.go:56 +0x219
webkomiksy.pl/m/api.(*Env).Image(0xc00038e000, 0xb79e40, 0xc0001cd360, 0xc0004c3000, 0xc00003ff30)
	/home/maciej/projects/website/api/image.go:21 +0x1a9
github.com/labstack/echo/v4.(*Echo).add.func1(0xb79e40, 0xc0001cd360, 0x5, 0xc00056c801)
	/home/maciej/go/pkg/mod/github.com/labstack/echo/v4@v4.2.0/echo.go:536 +0x62
main.main.func5.1(0xb79e40, 0xc0001cd360, 0xc00056c840, 0xadac68)
	/home/maciej/projects/website/server.go:105 +0x1ad
github.com/labstack/echo/v4/middleware.TimeoutWithConfig.func1.1.1(0xc0005d0780, 0xc000021ba0, 0xb79e40, 0xc0001cd360)
	/home/maciej/go/pkg/mod/github.com/labstack/echo/v4@v4.2.0/middleware/timeout.go:67 +0x3a
created by github.com/labstack/echo/v4/middleware.TimeoutWithConfig.func1.1
	/home/maciej/go/pkg/mod/github.com/labstack/echo/v4@v4.2.0/middleware/timeout.go:64 +0x230

Expected behavior

The server will continue to work after a timeout on the request

Actual behavior

Server is going down

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions