From 0e6b4ac19e7f68e5b9c9df1b296c91c783d715a2 Mon Sep 17 00:00:00 2001 From: Liu Yuan Date: Tue, 3 Nov 2020 18:09:07 +0800 Subject: [PATCH] fix data race while set prefix (#125) fix data race in gin handler --- README.md | 8 ++++---- swagger.go | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 14a5fb9..f711d4c 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ import ( "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" - + _ "github.com/swaggo/gin-swagger/example/basic/docs" // docs is generated by Swag CLI, you have to import it. ) @@ -86,7 +86,7 @@ import ( "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" - + _ "github.com/swaggo/gin-swagger/example/basic/docs" // docs is generated by Swag CLI, you have to import it. ) @@ -106,8 +106,8 @@ import ( // @BasePath /v2 func main() { r := gin.New() - - // use ginSwagger middleware to + + // use ginSwagger middleware to r.GET("/swagger/*any", ginSwagger.DisablingWrapHandler(swaggerFiles.Handler, "NAME_OF_ENV_VARIABLE")) r.Run() diff --git a/swagger.go b/swagger.go index 2637e7c..aa47dd4 100644 --- a/swagger.go +++ b/swagger.go @@ -5,6 +5,7 @@ import ( "os" "regexp" "strings" + "sync" "golang.org/x/net/webdav" @@ -54,6 +55,7 @@ func CustomWrapHandler(config *Config, h *webdav.Handler) gin.HandlerFunc { index, _ := t.Parse(swagger_index_templ) var rexp = regexp.MustCompile(`(.*)(index\.html|doc\.json|favicon-16x16\.png|favicon-32x32\.png|/oauth2-redirect\.html|swagger-ui\.css|swagger-ui\.css\.map|swagger-ui\.js|swagger-ui\.js\.map|swagger-ui-bundle\.js|swagger-ui-bundle\.js\.map|swagger-ui-standalone-preset\.js|swagger-ui-standalone-preset\.js\.map)[\?|.]*`) + var locker sync.RWMutex return func(c *gin.Context) { @@ -70,7 +72,10 @@ func CustomWrapHandler(config *Config, h *webdav.Handler) gin.HandlerFunc { } path := matches[2] prefix := matches[1] + + locker.Lock() h.Prefix = prefix + locker.Unlock() if strings.HasSuffix(path, ".html") { c.Header("Content-Type", "text/html; charset=utf-8") @@ -96,7 +101,9 @@ func CustomWrapHandler(config *Config, h *webdav.Handler) gin.HandlerFunc { c.Writer.Write([]byte(doc)) return default: + locker.RLock() h.ServeHTTP(c.Writer, c.Request) + locker.RUnlock() } } }