Browse Source

Refactors Context allocation

Manu Mtz-Almeida 10 years ago
parent
commit
1e417c7a50
2 changed files with 15 additions and 7 deletions
  1. 8 4
      context.go
  2. 7 3
      gin.go

+ 8 - 4
context.go

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

+ 7 - 3
gin.go

@@ -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}
-		c.Writer = &c.writermem
-		return c
+		return engine.allocateContext()
 	}
 	}
 	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)