summaryrefslogtreecommitdiff
path: root/rpcs/blockService.go
diff options
context:
space:
mode:
Diffstat (limited to 'rpcs/blockService.go')
-rw-r--r--rpcs/blockService.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/rpcs/blockService.go b/rpcs/blockService.go
index 2df26223c..2e77aba8e 100644
--- a/rpcs/blockService.go
+++ b/rpcs/blockService.go
@@ -23,6 +23,7 @@ import (
"path"
"strconv"
"strings"
+ "sync"
"github.com/gorilla/mux"
@@ -72,6 +73,7 @@ type BlockService struct {
fallbackEndpoints fallbackEndpoints
enableArchiverFallback bool
log logging.Logger
+ closeWaitGroup sync.WaitGroup
}
// EncodedBlockCert defines how GetBlockBytes encodes a block and its certificate
@@ -125,12 +127,14 @@ func (bs *BlockService) Start() {
bs.net.RegisterHandlers(handlers)
}
bs.stop = make(chan struct{})
+ bs.closeWaitGroup.Add(1)
go bs.listenForCatchupReq(bs.catchupReqs, bs.stop)
}
// Stop servicing catchup requests over ws
func (bs *BlockService) Stop() {
close(bs.stop)
+ bs.closeWaitGroup.Wait()
}
// ServerHTTP returns blocks
@@ -237,6 +241,7 @@ func (bs *BlockService) processIncomingMessage(msg network.IncomingMessage) (n n
// listenForCatchupReq handles catchup getblock request
func (bs *BlockService) listenForCatchupReq(reqs <-chan network.IncomingMessage, stop chan struct{}) {
+ defer bs.closeWaitGroup.Done()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
for {