Adds Keep() and Release() to gin.Context
This commit is contained in:
parent
30ea9c06fc
commit
d9573b45c7
27
gin.go
27
gin.go
@ -45,6 +45,7 @@ type (
|
||||
Errors ErrorMsgs
|
||||
Params httprouter.Params
|
||||
Engine *Engine
|
||||
keep bool
|
||||
handlers []HandlerFunc
|
||||
index int8
|
||||
}
|
||||
@ -180,6 +181,7 @@ func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, pa
|
||||
Writer: w,
|
||||
Req: req,
|
||||
Params: params,
|
||||
keep: false,
|
||||
handlers: handlers,
|
||||
index: -1,
|
||||
Engine: engine,
|
||||
@ -188,9 +190,11 @@ func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, pa
|
||||
}
|
||||
|
||||
func (engine *Engine) reuseContext(c *Context) {
|
||||
select {
|
||||
case engine.cache <- c:
|
||||
default:
|
||||
if c.keep == false {
|
||||
select {
|
||||
case engine.cache <- c:
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -268,6 +272,23 @@ func (group *RouterGroup) combineHandlers(handlers []HandlerFunc) []HandlerFunc
|
||||
/****** FLOW AND ERROR MANAGEMENT****/
|
||||
/************************************/
|
||||
|
||||
func (c *Context) Keep() {
|
||||
if c.keep == false {
|
||||
c.keep = true
|
||||
} else {
|
||||
log.Println("gin: trying to Keep same context several times")
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Context) Release() {
|
||||
if c.keep == true {
|
||||
c.keep = false
|
||||
c.Engine.reuseContext(c)
|
||||
} else {
|
||||
log.Println("gin: bug: trying to Release same context several times")
|
||||
}
|
||||
}
|
||||
|
||||
// Next should be used only in the middlewares.
|
||||
// It executes the pending handlers in the chain inside the calling handler.
|
||||
// See example in github.
|
||||
|
Loading…
Reference in New Issue
Block a user