mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-24 18:21:38 +00:00
abci/client: fix DATA RACE in gRPC client (#3798)
* Remove go func {}() closes #357 - Remove go func(){}() that caused race condiditon - To reproduce - add -race in make file to `install_abci` - Remove `CGO_ENABLED=0` & add -race to `install` Signed-off-by: Marko Baricevic <marbar3778@yahoo.com> * remove -race * fix data race also, reorder callbacks similarly to socket client
This commit is contained in:
@ -228,18 +228,22 @@ func (cli *grpcClient) finishAsyncCall(req *types.Request, res *types.Response)
|
|||||||
reqres.Done() // Release waiters
|
reqres.Done() // Release waiters
|
||||||
reqres.SetDone() // so reqRes.SetCallback will run the callback
|
reqres.SetDone() // so reqRes.SetCallback will run the callback
|
||||||
|
|
||||||
// go routine for callbacks
|
// goroutine for callbacks
|
||||||
go func() {
|
go func() {
|
||||||
// Notify reqRes listener if set
|
cli.mtx.Lock()
|
||||||
if cb := reqres.GetCallback(); cb != nil {
|
defer cli.mtx.Unlock()
|
||||||
cb(res)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify client listener if set
|
// Notify client listener if set
|
||||||
if cli.resCb != nil {
|
if cli.resCb != nil {
|
||||||
cli.resCb(reqres.Request, res)
|
cli.resCb(reqres.Request, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Notify reqRes listener if set
|
||||||
|
if cb := reqres.GetCallback(); cb != nil {
|
||||||
|
cb(res)
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return reqres
|
return reqres
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user