diff options
author | David Goulet <dgoulet@torproject.org> | 2021-05-27 10:01:44 -0400 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2021-05-27 10:01:44 -0400 |
commit | fd3678fa60b3ba66fa414f86ce962f380ca6462e (patch) | |
tree | a2eaf81a64fcd495e9fb6954ebeb9c28936ef610 /src/feature/dirclient/dirclient.c | |
parent | bab2b29f89f21781a87010cf7120615615b90599 (diff) | |
parent | d12b16614d09b303f9ef9624107b589264537341 (diff) | |
download | tor-fd3678fa60b3ba66fa414f86ce962f380ca6462e.tar.gz tor-fd3678fa60b3ba66fa414f86ce962f380ca6462e.zip |
Merge branch 'tor-gitlab/mr/392' into maint-0.4.6
Diffstat (limited to 'src/feature/dirclient/dirclient.c')
-rw-r--r-- | src/feature/dirclient/dirclient.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/feature/dirclient/dirclient.c b/src/feature/dirclient/dirclient.c index aa7759257f..49d7a1bf71 100644 --- a/src/feature/dirclient/dirclient.c +++ b/src/feature/dirclient/dirclient.c @@ -2186,18 +2186,23 @@ handle_response_fetch_consensus(dir_connection_t *conn, if (looks_like_a_consensus_diff(body, body_len)) { /* First find our previous consensus. Maybe it's in ram, maybe not. */ - cached_dir_t *cd = dirserv_get_consensus(flavname); + cached_dir_t *cd = NULL; const char *consensus_body = NULL; size_t consensus_body_len; tor_mmap_t *mapped_consensus = NULL; - if (cd) { - consensus_body = cd->dir; - consensus_body_len = cd->dir_len; + + /* We prefer the mmap'd version over the cached_dir_t version, + * since that matches the logic we used when we picked a consensus + * back in dir_consensus_request_set_additional_headers. */ + mapped_consensus = networkstatus_map_cached_consensus(flavname); + if (mapped_consensus) { + consensus_body = mapped_consensus->data; + consensus_body_len = mapped_consensus->size; } else { - mapped_consensus = networkstatus_map_cached_consensus(flavname); - if (mapped_consensus) { - consensus_body = mapped_consensus->data; - consensus_body_len = mapped_consensus->size; + cd = dirserv_get_consensus(flavname); + if (cd) { + consensus_body = cd->dir; + consensus_body_len = cd->dir_len; } } if (!consensus_body) { |