Testing Copy() instead of Keep() and Release()

This commit is contained in:
Manu Mtz-Almeida 2014-07-03 16:31:27 +02:00
parent d9573b45c7
commit d7a3fdcd8f

26
gin.go
View File

@ -45,7 +45,6 @@ type (
Errors ErrorMsgs Errors ErrorMsgs
Params httprouter.Params Params httprouter.Params
Engine *Engine Engine *Engine
keep bool
handlers []HandlerFunc handlers []HandlerFunc
index int8 index int8
} }
@ -174,6 +173,7 @@ func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, pa
c.Req = req c.Req = req
c.Params = params c.Params = params
c.handlers = handlers c.handlers = handlers
c.Keys = nil
c.index = -1 c.index = -1
return c return c
default: default:
@ -181,7 +181,6 @@ func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, pa
Writer: w, Writer: w,
Req: req, Req: req,
Params: params, Params: params,
keep: false,
handlers: handlers, handlers: handlers,
index: -1, index: -1,
Engine: engine, Engine: engine,
@ -190,13 +189,11 @@ func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, pa
} }
func (engine *Engine) reuseContext(c *Context) { func (engine *Engine) reuseContext(c *Context) {
if c.keep == false {
select { select {
case engine.cache <- c: case engine.cache <- c:
default: default:
} }
} }
}
// Adds middlewares to the group, see example code in github. // Adds middlewares to the group, see example code in github.
func (group *RouterGroup) Use(middlewares ...HandlerFunc) { func (group *RouterGroup) Use(middlewares ...HandlerFunc) {
@ -272,21 +269,12 @@ func (group *RouterGroup) combineHandlers(handlers []HandlerFunc) []HandlerFunc
/****** FLOW AND ERROR MANAGEMENT****/ /****** FLOW AND ERROR MANAGEMENT****/
/************************************/ /************************************/
func (c *Context) Keep() { func (c *Context) Copy() *Context {
if c.keep == false { cp := &Context{}
c.keep = true *cp = *c
} else { cp.index = AbortIndex
log.Println("gin: trying to Keep same context several times") cp.handlers = nil
} return cp
}
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. // Next should be used only in the middlewares.