1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-24 11:20:54 +00:00

fix memory leak of request context

This commit is contained in:
jianzhiyao 2020-07-25 00:00:34 +08:00
parent 9d936c58bf
commit cfff0f3b46
3 changed files with 40 additions and 2 deletions

View File

@ -323,8 +323,36 @@ func (input *BeegoInput) SetParam(key, val string) {
// This function is used to clear parameters so they may be reset between filter
// passes.
func (input *BeegoInput) ResetParams() {
input.pnames = input.pnames[:0]
input.pvalues = input.pvalues[:0]
if len(input.pnames) > 0 {
input.pnames = input.pnames[:0]
}
if len(input.pvalues) > 0 {
input.pvalues = input.pvalues[:0]
}
}
// ResetData: reset data
func (input *BeegoInput) ResetData() {
input.dataLock.Lock()
if input.data != nil {
input.data = nil
}
input.dataLock.Unlock()
}
// ResetBody: reset body
func (input *BeegoInput) ResetBody() {
if len(input.RequestBody) > 0 {
input.RequestBody = []byte{}
}
}
// Clear: clear all data in input
func (input *BeegoInput) Clear() {
input.ResetParams()
input.ResetData()
input.ResetBody()
}
// Query returns input data item string by a given string.

View File

@ -50,9 +50,15 @@ func NewOutput() *BeegoOutput {
// Reset init BeegoOutput
func (output *BeegoOutput) Reset(ctx *Context) {
output.Context = ctx
output.Clear()
}
// Clear: clear all data in output
func (output *BeegoOutput) Clear() {
output.Status = 0
}
// Header sets response header item string via given key.
func (output *BeegoOutput) Header(key, val string) {
output.Context.ResponseWriter.Header().Set(key, val)

View File

@ -319,6 +319,10 @@ func (p *ControllerRegister) GetContext() *beecontext.Context {
// GiveBackContext put the ctx into pool so that it could be reuse
func (p *ControllerRegister) GiveBackContext(ctx *beecontext.Context) {
// clear input cached data
ctx.Input.Clear()
// clear output cached data
ctx.Output.Clear()
p.pool.Put(ctx)
}