mirror of
				https://github.com/gin-gonic/gin.git
				synced 2025-11-04 17:22:12 +08:00 
			
		
		
		
	Adds Keep() and Release() to gin.Context
This commit is contained in:
		
							parent
							
								
									30ea9c06fc
								
							
						
					
					
						commit
						d9573b45c7
					
				
							
								
								
									
										21
									
								
								gin.go
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								gin.go
									
									
									
									
									
								
							@ -45,6 +45,7 @@ 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
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -180,6 +181,7 @@ 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,
 | 
				
			||||||
@ -188,10 +190,12 @@ 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.
 | 
				
			||||||
@ -268,6 +272,23 @@ func (group *RouterGroup) combineHandlers(handlers []HandlerFunc) []HandlerFunc
 | 
				
			|||||||
/****** FLOW AND ERROR MANAGEMENT****/
 | 
					/****** 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.
 | 
					// Next should be used only in the middlewares.
 | 
				
			||||||
// It executes the pending handlers in the chain inside the calling handler.
 | 
					// It executes the pending handlers in the chain inside the calling handler.
 | 
				
			||||||
// See example in github.
 | 
					// See example in github.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user