diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 2d02a9ff9..cbae601c4 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -171,6 +171,7 @@ impl RendezvousMediator { let mut latency = last_register_sent .map(|x| x.elapsed().as_micros() as i64) .unwrap_or(0); + last_register_sent = None; if latency < 0 || latency > 1_000_000 { return; } @@ -216,11 +217,9 @@ impl RendezvousMediator { continue; } last_timer = now; - let elapsed_resp = last_register_resp.map(|x| x.elapsed().as_millis() as i64).unwrap_or(REG_INTERVAL); - let timeout = (elapsed_resp - last_register_sent.map(|x| x.elapsed().as_millis() as i64).unwrap_or(REG_INTERVAL)) > REG_TIMEOUT; - if timeout || elapsed_resp >= REG_INTERVAL { - rz.register_peer(Sink::Framed(&mut socket, &addr)).await?; - last_register_sent = now; + let expired = last_register_resp.map(|x| x.elapsed().as_millis() as i64 >= REG_INTERVAL).unwrap_or(true); + let timeout = last_register_sent.map(|x| x.elapsed().as_millis() as i64 >= REG_TIMEOUT).unwrap_or(false); + if timeout || (last_register_sent.is_none() && expired) { if timeout { fails += 1; if fails > MAX_FAILS2 { @@ -240,6 +239,8 @@ impl RendezvousMediator { old_latency = 0; } } + rz.register_peer(Sink::Framed(&mut socket, &addr)).await?; + last_register_sent = now; } } }