Merge pull request #1077 from status-im/timeout

Eth2Node.stop(): trace msg on timeout
This commit is contained in:
Ștefan Talpalaru 2020-05-29 16:30:13 +02:00 committed by GitHub
commit a90b0dd197
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 9 deletions

View File

@ -1,6 +1,6 @@
import
# Std lib
typetraits, strutils, os, random, algorithm,
typetraits, strutils, os, random, algorithm, sequtils,
options as stdOptions, net as stdNet,
# Status libs
@ -741,14 +741,17 @@ proc start*(node: Eth2Node) {.async.} =
traceAsyncErrors node.discoveryLoop
proc stop*(node: Eth2Node) {.async.} =
# Ignore errors in futures, since we're shutting down.
# Use a timer to avoid hangups.
discard await one(sleepAsync(5.seconds),
allFutures(@[
node.discovery.closeWait(),
node.switch.stop(),
])
)
# Ignore errors in futures, since we're shutting down (but log them on the
# TRACE level, if a timeout is reached).
let
waitedFutures = @[
node.discovery.closeWait(),
node.switch.stop(),
]
timeout = 5.seconds
completed = await withTimeout(allFutures(waitedFutures), timeout)
if not completed:
trace "Eth2Node.stop(): timeout reached", timeout, futureErrors = waitedFutures.filterIt(it.error != nil).mapIt(it.error.msg)
proc init*(T: type Peer, network: Eth2Node, info: PeerInfo): Peer =
new result