From d9573b45c71db971477d5eea9189497c1a7b2a20 Mon Sep 17 00:00:00 2001 From: Manu Mtz-Almeida Date: Thu, 3 Jul 2014 15:59:39 +0200 Subject: [PATCH] Adds Keep() and Release() to gin.Context --- gin.go | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/gin.go b/gin.go index f60901cd..fea800f2 100644 --- a/gin.go +++ b/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.