Call MultipartForm.RemoveAll when request finishes (#19606)
This commit is contained in:
parent
7b089c465d
commit
04fc4b7e05
7 changed files with 21 additions and 0 deletions
|
@ -256,6 +256,7 @@ func APIContexter() func(http.Handler) http.Handler {
|
|||
},
|
||||
Org: &APIOrganization{},
|
||||
}
|
||||
defer ctx.Close()
|
||||
|
||||
ctx.Req = WithAPIContext(WithContext(req, ctx.Context), &ctx)
|
||||
|
||||
|
|
|
@ -75,6 +75,16 @@ type Context struct {
|
|||
Package *Package
|
||||
}
|
||||
|
||||
// Close frees all resources hold by Context
|
||||
func (ctx *Context) Close() error {
|
||||
var err error
|
||||
if ctx.Req != nil && ctx.Req.MultipartForm != nil {
|
||||
err = ctx.Req.MultipartForm.RemoveAll() // remove the temp files buffered to tmp directory
|
||||
}
|
||||
// TODO: close opened repo, and more
|
||||
return err
|
||||
}
|
||||
|
||||
// TrHTMLEscapeArgs runs Tr but pre-escapes all arguments with html.EscapeString.
|
||||
// This is useful if the locale message is intended to only produce HTML content.
|
||||
func (ctx *Context) TrHTMLEscapeArgs(msg string, args ...string) string {
|
||||
|
@ -693,6 +703,8 @@ func Contexter() func(next http.Handler) http.Handler {
|
|||
"RunModeIsProd": setting.IsProd,
|
||||
},
|
||||
}
|
||||
defer ctx.Close()
|
||||
|
||||
// PageData is passed by reference, and it will be rendered to `window.config.pageData` in `head.tmpl` for JavaScript modules
|
||||
ctx.PageData = map[string]interface{}{}
|
||||
ctx.Data["PageData"] = ctx.PageData
|
||||
|
|
|
@ -100,6 +100,7 @@ func PackageContexter() func(next http.Handler) http.Handler {
|
|||
Resp: NewResponse(resp),
|
||||
Data: map[string]interface{}{},
|
||||
}
|
||||
defer ctx.Close()
|
||||
|
||||
ctx.Req = WithContext(req, &ctx)
|
||||
|
||||
|
|
|
@ -66,6 +66,8 @@ func PrivateContexter() func(http.Handler) http.Handler {
|
|||
Data: map[string]interface{}{},
|
||||
},
|
||||
}
|
||||
defer ctx.Close()
|
||||
|
||||
ctx.Req = WithPrivateContext(req, ctx)
|
||||
ctx.Data["Context"] = ctx
|
||||
next.ServeHTTP(ctx.Resp, ctx.Req)
|
||||
|
|
|
@ -38,6 +38,7 @@ func MockContext(t *testing.T, path string) *context.Context {
|
|||
Resp: context.NewResponse(resp),
|
||||
Locale: &mockLocale{},
|
||||
}
|
||||
defer ctx.Close()
|
||||
|
||||
requestURL, err := url.Parse(path)
|
||||
assert.NoError(t, err)
|
||||
|
|
|
@ -37,6 +37,8 @@ func createContext(req *http.Request) (*context.Context, *httptest.ResponseRecor
|
|||
Render: rnd,
|
||||
Data: make(map[string]interface{}),
|
||||
}
|
||||
defer c.Close()
|
||||
|
||||
return c, resp
|
||||
}
|
||||
|
||||
|
|
|
@ -79,6 +79,8 @@ func Init(next http.Handler) http.Handler {
|
|||
"PasswordHashAlgorithms": user_model.AvailableHashAlgorithms,
|
||||
},
|
||||
}
|
||||
defer ctx.Close()
|
||||
|
||||
ctx.Req = context.WithContext(req, &ctx)
|
||||
next.ServeHTTP(resp, ctx.Req)
|
||||
})
|
||||
|
|
Reference in a new issue