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:
Marko
2019-07-17 09:49:01 +02:00
committed by Jack Zampolin
parent 9867a65de7
commit 8da43508f8

View File

@ -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
} }