Call MultipartForm.RemoveAll when request finishes (#19606) (#19607)

This commit is contained in:
wxiaoguang 2022-05-05 22:13:59 +08:00 committed by GitHub
parent 7b18c67ac9
commit 46637b1164
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 20 additions and 0 deletions

View file

@ -288,6 +288,7 @@ func APIContexter() func(http.Handler) http.Handler {
}, },
Org: &APIOrganization{}, Org: &APIOrganization{},
} }
defer ctx.Close()
ctx.Req = WithAPIContext(WithContext(req, ctx.Context), &ctx) ctx.Req = WithAPIContext(WithContext(req, ctx.Context), &ctx)
ctx.csrf = Csrfer(csrfOpts, ctx.Context) ctx.csrf = Csrfer(csrfOpts, ctx.Context)

View file

@ -71,6 +71,16 @@ type Context struct {
Org *Organization Org *Organization
} }
// 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. // 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. // This is useful if the locale message is intended to only produce HTML content.
func (ctx *Context) TrHTMLEscapeArgs(msg string, args ...string) string { func (ctx *Context) TrHTMLEscapeArgs(msg string, args ...string) string {
@ -643,6 +653,8 @@ func Contexter() func(next http.Handler) http.Handler {
"RunModeIsProd": setting.IsProd, "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 // 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.PageData = map[string]interface{}{}
ctx.Data["PageData"] = ctx.PageData ctx.Data["PageData"] = ctx.PageData

View file

@ -38,6 +38,8 @@ func PrivateContexter() func(http.Handler) http.Handler {
Data: map[string]interface{}{}, Data: map[string]interface{}{},
}, },
} }
defer ctx.Close()
ctx.Req = WithPrivateContext(req, ctx) ctx.Req = WithPrivateContext(req, ctx)
next.ServeHTTP(ctx.Resp, ctx.Req) next.ServeHTTP(ctx.Resp, ctx.Req)
}) })

View file

@ -39,6 +39,7 @@ func MockContext(t *testing.T, path string) *context.Context {
Resp: context.NewResponse(resp), Resp: context.NewResponse(resp),
Locale: &mockLocale{}, Locale: &mockLocale{},
} }
defer ctx.Close()
requestURL, err := url.Parse(path) requestURL, err := url.Parse(path)
assert.NoError(t, err) assert.NoError(t, err)

View file

@ -35,6 +35,8 @@ func createContext(req *http.Request) (*context.Context, *httptest.ResponseRecor
Render: rnd, Render: rnd,
Data: make(map[string]interface{}), Data: make(map[string]interface{}),
} }
defer c.Close()
return c, resp return c, resp
} }

View file

@ -84,6 +84,8 @@ func Init(next http.Handler) http.Handler {
"PasswordHashAlgorithms": user_model.AvailableHashAlgorithms, "PasswordHashAlgorithms": user_model.AvailableHashAlgorithms,
}, },
} }
defer ctx.Close()
for _, lang := range translation.AllLangs() { for _, lang := range translation.AllLangs() {
if lang.Lang == locale.Language() { if lang.Lang == locale.Language() {
ctx.Data["LangName"] = lang.Name ctx.Data["LangName"] = lang.Name