mirror of
https://github.com/mimblewimble/grin.git
synced 2025-01-20 19:11:08 +03:00
try_header_head in the syncer loop with a short timeout (#3165)
to prevent it getting locked up after txhashset download and validation
This commit is contained in:
parent
fd4c4c52f2
commit
b5f73b6aab
1 changed files with 12 additions and 1 deletions
|
@ -182,7 +182,18 @@ impl SyncRunner {
|
|||
// if syncing is needed
|
||||
let head = unwrap_or_restart_loop!(self.chain.head());
|
||||
let tail = self.chain.tail().unwrap_or_else(|_| head.clone());
|
||||
let header_head = unwrap_or_restart_loop!(self.chain.header_head());
|
||||
|
||||
// We still do not fully understand what is blocking this but if this blocks here after
|
||||
// we download and validate the txhashet we do not reliably proceed to block_sync,
|
||||
// potentially blocking for an extended period of time (> 10 mins).
|
||||
// Does not appear to be deadlock as it does resolve itself eventually.
|
||||
// So as a workaround we try_header_head with a relatively short timeout and simply
|
||||
// retry the syncer loop.
|
||||
let maybe_header_head =
|
||||
unwrap_or_restart_loop!(self.chain.try_header_head(time::Duration::from_secs(1)));
|
||||
let header_head = unwrap_or_restart_loop!(
|
||||
maybe_header_head.ok_or("failed to obtain lock for try_header_head")
|
||||
);
|
||||
|
||||
// run each sync stage, each of them deciding whether they're needed
|
||||
// except for state sync that only runs if body sync return true (means txhashset is needed)
|
||||
|
|
Loading…
Reference in a new issue