Comments (7)
actually, this data race
can avoid by pass ctx.Copy()
. and this case is very hard to trigger, but for thread safe, it's better to consider it.
from gin.
Just a question, in what scenarios is it necessary to pass the Gin context into Gorm's? After all, Gorm is primarily used for controlling database-related operations, such as querying with timeouts. The context in Gin seems fundamentally different from the context in Gorm
from gin.
but the profiles I know are more SRE oriented, not really on protocol side.
yes, but sometimes developer will directly passes the gin.Context to db interface, it will becomes a issue. (I always pass like this)
from gin.
Wow, Good findings @georgehao
If I understand correctly, the race is happen between go rs.awaitDone(ctx, txctx)
from sql package and the gin ServeHTTP
that trying to serve new request comes in.
So, there are 2 goroutines run parallel.
The first one is from go rs.awaitDone(ctx, txctx)
which trying to read *http.Request to get the context.Context from std http lib.
The second goroutine is from a new request comes in and got a same reference of *gin.Context (previous request already marked as finished by gin and gin put the *gin.Context back to the pool) trying to write the new *http.Request to the *gin.Context
from gin.
The second goroutine is from a new request comes in and got a same reference of *gin.Context (previous request already marked as finished by gin and gin put the *gin.Context back to the pool) trying to write the new *http.Request to the *gin.Context
Almost correct, only tweak a little. owing to rs.close(ctx.Err())
=> ctx.Err()
cause the data race
.
from gin.
Almost correct, only tweak a little. owing to
rs.close(ctx.Err())
=>ctx.Err()
cause thedata race
.
If I read your data race stack trace, the race comes from <-ctx.Done()
which trying to call gin HasRequestContext reading the *http.Request, but at the same time the new request trying to store new *http.Request in same *gin.Context
from gin.
Oh my bad I didn't notice that the stacktrace shows the race comes from ctx.Err()
that trying to read *gin.Context.Request
from gin.
Related Issues (20)
- I want to use shouldmindbodywith first and then use formafile, but it doesn't work right now HOT 3
- Extend the routing tree entry
- Transparent decompression for gzip, deflate, etc? HOT 1
- Custom time.Time type can not use bindQuery get a value 2 HOT 2
- http: response.Write on hijacked connection from github.com/gin-gonic/gin.(*responseWriter).Write (response_writer.go:83) HOT 1
- Suggestion: Move Print Debug to Run() functions? HOT 7
- AbortWithStatusJSON doesn't abort context HOT 2
- I translated `tree.go` into java
- GetUint and GetUint64 wrong return HOT 1
- Multipart form-data request with empty key for single file upload
- gin with golang 1.21, 1.22 DATA RACE
- Please consider remove github.com/bytedance/sonic from dependencies HOT 4
- send response from middleware, continue to execute handler chain HOT 3
- StringToBytes is slower than the raw convertion
- Bind recursion struct param fatal exit HOT 1
- Warning link doesn't point to anything anymore HOT 1
- verifying github.com/gin-gonic/[email protected]: checksum mismatch, how to fix it? HOT 1
- c.Data and c.DataFromReader overwrite the set header HOT 1
- Vulnerability in golang.org/x/net/http2 version < 0.23.0 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gin.