diff --git a/sync/src/chain.rs b/sync/src/chain.rs index eccc8ae98..6229627c4 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -392,7 +392,10 @@ impl ChainSync { self.have_common_block = true; trace!(target: "sync", "Found common header {} ({})", number, hash); } else { - trace!(target: "sync", "Header already in chain {} ({})", number, hash); + trace!(target: "sync", "Header already in chain {} ({}), restarting", number, hash); + self.restart(io); + self.continue_sync(io); + return Ok(()); } }, _ => { @@ -467,6 +470,12 @@ impl ChainSync { trace!(target: "sync", "Ignored block bodies while waiting"); return Ok(()); } + if item_count == 0 { + trace!(target: "sync", "No bodies returned, restarting"); + self.restart(io); + self.continue_sync(io); + return Ok(()); + } for i in 0..item_count { let body = try!(r.at(i)); let tx = try!(body.at(0)); @@ -1350,6 +1359,10 @@ impl ChainSync { // Propagate latests blocks self.propagate_latest_blocks(io); } + if !invalid.is_empty() { + trace!(target: "sync", "Bad blocks in the queue, restarting"); + self.restart_on_bad_block(io); + } // TODO [todr] propagate transactions? }