aboutsummaryrefslogtreecommitdiff
path: root/src/feature/dirclient/dirclient.c
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2021-05-27 10:01:44 -0400
committerDavid Goulet <dgoulet@torproject.org>2021-05-27 10:01:44 -0400
commitfd3678fa60b3ba66fa414f86ce962f380ca6462e (patch)
treea2eaf81a64fcd495e9fb6954ebeb9c28936ef610 /src/feature/dirclient/dirclient.c
parentbab2b29f89f21781a87010cf7120615615b90599 (diff)
parentd12b16614d09b303f9ef9624107b589264537341 (diff)
downloadtor-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.c21
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) {