Eth2Node.stop(): trace msg on timeout

This commit is contained in:
Ștefan Talpalaru 2020-05-28 03:14:01 +02:00
parent c0daeb8432
commit 273a912ae0
No known key found for this signature in database
GPG Key ID: CBF7934204F1B6F9
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
@ -738,14 +738,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