From ef93bbeb9bcca29eabe21492978aad5bf60ce640 Mon Sep 17 00:00:00 2001 From: Saksham Arya Date: Wed, 20 Nov 2024 16:02:55 +0530 Subject: [PATCH] make headers thread safe add reader lock --- context.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/context.go b/context.go index 842ad2ff..3fbf4af2 100644 --- a/context.go +++ b/context.go @@ -22,6 +22,7 @@ import ( "time" "github.com/gin-contrib/sse" + "github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/render" ) @@ -72,6 +73,9 @@ type Context struct { // This mutex protects Keys map. mu sync.RWMutex + // This mutex protects headers map + hmu sync.RWMutex + // Keys is a key/value pair exclusively for the context of each request. Keys map[any]any @@ -975,6 +979,8 @@ func (c *Context) IsWebsocket() bool { } func (c *Context) requestHeader(key string) string { + c.hmu.Lock() + defer c.hmu.Unlock() return c.Request.Header.Get(key) } @@ -1004,6 +1010,8 @@ func (c *Context) Status(code int) { // It writes a header in the response. // If value == "", this method removes the header `c.Writer.Header().Del(key)` func (c *Context) Header(key, value string) { + c.hmu.Lock() + defer c.hmu.Unlock() if value == "" { c.Writer.Header().Del(key) return