code: func (pm *ProtocolManager) synchronise(peer *peer) {
  	// Short circuit if no peers are available
  	if peer == nil {
  		return
  	}
  
  	// Make sure the peer's TD is higher than our own.
  	if !pm.needToSync(peer.headBlockInfo()) {
  		return
  	}
  
  	ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
  	defer cancel()
  	pm.blockchain.(*light.LightChain).SyncCht(ctx)
  	pm.downloader.Synchronise(peer.id, peer.Head(), peer.Td(), downloader.LightSync)
  }
docs: // synchronise tries to sync up our local block chain with a remote peer.