diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/or/dirserv.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/or/dirserv.c b/src/or/dirserv.c index dd9026758c..80831b5be0 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -923,6 +923,11 @@ running_long_enough_to_decide_unreachable(void) * the directory. */ #define REACHABLE_TIMEOUT (45*60) +/** If we tested a router and found it reachable _at least this long_ after it + * declared itself hibernating, it is probably done hibernating and we just + * missed a descriptor from it. */ +#define ALLOW_REACHABILITY_PUBLICATION_SKEW (60*60) + /** Treat a router as alive if * - It's me, and I'm not hibernating. * or - We've found it reachable recently. */ @@ -939,7 +944,8 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now) /* We always know if we are down ourselves. */ answer = ! we_are_hibernating(); } else if (router->is_hibernating && - router->cache_info.published_on > router->last_reachable) { + (router->cache_info.published_on + + ALLOW_REACHABILITY_PUBLICATION_SKEW) > router->last_reachable) { /* A hibernating router is down unless we (somehow) had contact with it * since it declared itself to be hibernating. */ answer = 0; |