OSDN Git Service

Fix BlockWaiter dead lock (#311)
authoryahtoo <yahtoo.ma@gmail.com>
Thu, 18 Jul 2019 06:58:50 +0000 (14:58 +0800)
committerPaladz <yzhu101@uottawa.ca>
Thu, 18 Jul 2019 06:58:50 +0000 (14:58 +0800)
* Fix BlockWaiter dead lock

* Opz name of the variable

protocol/protocol.go

index d7ea944..314b568 100644 (file)
@@ -201,9 +201,7 @@ func (c *Chain) setState(blockHeader, irrBlockHeader *types.BlockHeader, mainBlo
 func (c *Chain) BlockWaiter(height uint64) <-chan struct{} {
        ch := make(chan struct{}, 1)
        go func() {
-               c.cond.L.Lock()
-               defer c.cond.L.Unlock()
-               for c.bestBlockHeader.Height < height {
+               for bestHeight := c.BestBlockHeight(); bestHeight < height; bestHeight = c.BestBlockHeight() {
                        c.cond.Wait()
                }
                ch <- struct{}{}