Merge pull request #115 from tendermint/socket_client_StopOnErrorDeadlock-fix

socketClient: fix and test for StopForError deadlock
This commit is contained in:
Ethan Buchman 2017-10-18 20:54:42 -04:00 committed by GitHub
commit 5231003bfc
2 changed files with 29 additions and 1 deletions

View File

@ -97,11 +97,11 @@ func (cli *socketClient) OnStop() {
// Stop the client and set the error
func (cli *socketClient) StopForError(err error) {
cli.mtx.Lock()
if !cli.IsRunning() {
return
}
cli.mtx.Lock()
if cli.err == nil {
cli.err = err
}

View File

@ -0,0 +1,28 @@
package abcicli_test
import (
"errors"
"testing"
"time"
"github.com/tendermint/abci/client"
)
func TestSocketClientStopForErrorDeadlock(t *testing.T) {
c := abcicli.NewSocketClient(":80", false)
err := errors.New("foo-tendermint")
// See Issue https://github.com/tendermint/abci/issues/114
doneChan := make(chan bool)
go func() {
defer close(doneChan)
c.StopForError(err)
c.StopForError(err)
}()
select {
case <-doneChan:
case <-time.After(time.Second * 4):
t.Fatalf("Test took too long, potential deadlock still exists")
}
}