Adds Keep() and Release() to gin.Context

This commit is contained in:
Manu Mtz-Almeida 2014-07-03 15:59:39 +02:00
parent 30ea9c06fc
commit d9573b45c7
1 changed files with 24 additions and 3 deletions

27
gin.go
View File

@ -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.