From f67a5b4fed0208fcffe8502473099c70b685342f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Sat, 9 Mar 2019 14:37:32 +0000 Subject: [PATCH] Don't wake up without paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adrien Gallouët --- mud.c | 16 +++++++++++----- mud.h | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/mud.c b/mud.c index 2888092..8ddb038 100644 --- a/mud.c +++ b/mud.c @@ -1467,7 +1467,7 @@ mud_update(struct mud *mud, uint64_t now) mud->mtu = mtu ?: MUD_MTU_MIN; } -unsigned long +long mud_send_wait(struct mud *mud) { const uint64_t now = mud_now(); @@ -1477,12 +1477,18 @@ mud_send_wait(struct mud *mud) if (mud->window) return 0; - unsigned long dt = MUD_ONE_SEC - 1; + long dt = MUD_ONE_SEC - 1; + unsigned not_down = 0; for (unsigned i = 0; i < mud->count; i++) { struct mud_path *path = &mud->paths[i]; - if (path->state <= MUD_DOWN || !path->ok) + if (path->state <= MUD_DOWN) + continue; + + not_down++; + + if (!path->ok) continue; uint64_t elapsed = MUD_TIME_MASK(now - path->window_time); @@ -1493,10 +1499,10 @@ mud_send_wait(struct mud *mud) uint64_t new_dt = MUD_WINDOW_TIMEOUT - elapsed; if ((uint64_t)dt > new_dt) - dt = (unsigned long)new_dt; + dt = (long)new_dt; } - return dt; + return not_down ? dt : -1; } unsigned long diff --git a/mud.h b/mud.h index bc0f67b..1198b16 100644 --- a/mud.h +++ b/mud.h @@ -63,7 +63,7 @@ int mud_get_key (struct mud *, unsigned char *, size_t *); void mud_set_mtu (struct mud *, size_t); size_t mud_get_mtu (struct mud *); -unsigned long mud_send_wait (struct mud *); +long mud_send_wait (struct mud *); unsigned long mud_sync (struct mud *); int mud_set_time_tolerance (struct mud *, unsigned long);