Refactors Context allocation

This commit is contained in:
Manu Mtz-Almeida 2015-03-25 19:33:17 +01:00
parent aa9fad5ad8
commit 1e417c7a50
2 changed files with 15 additions and 7 deletions

View File

@ -79,14 +79,11 @@ type Context struct {
func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, params httprouter.Params, handlers []HandlerFunc) *Context { func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, params httprouter.Params, handlers []HandlerFunc) *Context {
c := engine.pool.Get().(*Context) c := engine.pool.Get().(*Context)
c.reset()
c.writermem.reset(w) c.writermem.reset(w)
c.Request = req c.Request = req
c.Params = params c.Params = params
c.handlers = handlers c.handlers = handlers
c.Keys = nil
c.index = -1
c.accepted = nil
c.Errors = c.Errors[0:0]
return c return c
} }
@ -94,6 +91,13 @@ func (engine *Engine) reuseContext(c *Context) {
engine.pool.Put(c) engine.pool.Put(c)
} }
func (c *Context) reset() {
c.Keys = nil
c.index = -1
c.accepted = nil
c.Errors = c.Errors[0:0]
}
func (c *Context) Copy() *Context { func (c *Context) Copy() *Context {
var cp Context = *c var cp Context = *c
cp.index = AbortIndex cp.index = AbortIndex

10
gin.go
View File

@ -56,9 +56,7 @@ func New() *Engine {
engine.router.NotFound = engine.handle404 engine.router.NotFound = engine.handle404
engine.router.MethodNotAllowed = engine.handle405 engine.router.MethodNotAllowed = engine.handle405
engine.pool.New = func() interface{} { engine.pool.New = func() interface{} {
c := &Context{Engine: engine} return engine.allocateContext()
c.Writer = &c.writermem
return c
} }
return engine return engine
} }
@ -70,6 +68,12 @@ func Default() *Engine {
return engine return engine
} }
func (engine *Engine) allocateContext() (c *Context) {
c = &Context{Engine: engine}
c.Writer = &c.writermem
return
}
func (engine *Engine) LoadHTMLGlob(pattern string) { func (engine *Engine) LoadHTMLGlob(pattern string) {
if IsDebugging() { if IsDebugging() {
render.HTMLDebug.AddGlob(pattern) render.HTMLDebug.AddGlob(pattern)