mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Merge branch 'maint-0.2.1'
Resolved conflict in src/or/networkstatus.c
This commit is contained in:
commit
5ffe105598
5
changes/bug1141
Normal file
5
changes/bug1141
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
o Minor bugfixes:
|
||||||
|
- Fix an assertion failure that could occur in caches or bridge users
|
||||||
|
when using a very short voting interval on a testing network.
|
||||||
|
Diagnosed by Robert Hogan. Fixes bug 1141; bugfix on 0.2.0.8-alpha.
|
||||||
|
|
@ -1230,14 +1230,26 @@ update_consensus_networkstatus_fetch_time(time_t now)
|
|||||||
if (c) {
|
if (c) {
|
||||||
long dl_interval;
|
long dl_interval;
|
||||||
long interval = c->fresh_until - c->valid_after;
|
long interval = c->fresh_until - c->valid_after;
|
||||||
|
long min_sec_before_caching = CONSENSUS_MIN_SECONDS_BEFORE_CACHING;
|
||||||
time_t start;
|
time_t start;
|
||||||
|
|
||||||
|
if (min_sec_before_caching > interval/16) {
|
||||||
|
/* Usually we allow 2-minutes slop factor in case clocks get
|
||||||
|
desynchronized a little. If we're on a private network with
|
||||||
|
a crazy-fast voting interval, though, 2 minutes may be too
|
||||||
|
much. */
|
||||||
|
min_sec_before_caching = interval/16;
|
||||||
|
}
|
||||||
|
|
||||||
if (directory_fetches_dir_info_early(options)) {
|
if (directory_fetches_dir_info_early(options)) {
|
||||||
/* We want to cache the next one at some point after this one
|
/* We want to cache the next one at some point after this one
|
||||||
* is no longer fresh... */
|
* is no longer fresh... */
|
||||||
start = c->fresh_until + CONSENSUS_MIN_SECONDS_BEFORE_CACHING;
|
start = c->fresh_until + min_sec_before_caching;
|
||||||
/* Some clients may need the consensus sooner than others. */
|
/* Some clients may need the consensus sooner than others. */
|
||||||
if (options->FetchDirInfoExtraEarly) {
|
if (options->FetchDirInfoExtraEarly) {
|
||||||
dl_interval = 60;
|
dl_interval = 60;
|
||||||
|
if (min_sec_before_caching + dl_interval > interval)
|
||||||
|
dl_interval = interval/2;
|
||||||
} else {
|
} else {
|
||||||
/* But only in the first half-interval after that. */
|
/* But only in the first half-interval after that. */
|
||||||
dl_interval = interval/2;
|
dl_interval = interval/2;
|
||||||
@ -1253,10 +1265,9 @@ update_consensus_networkstatus_fetch_time(time_t now)
|
|||||||
* to choose the rest of the interval *after* them. */
|
* to choose the rest of the interval *after* them. */
|
||||||
if (directory_fetches_dir_info_later(options)) {
|
if (directory_fetches_dir_info_later(options)) {
|
||||||
/* Give all the *clients* enough time to download the consensus. */
|
/* Give all the *clients* enough time to download the consensus. */
|
||||||
start = start + dl_interval + CONSENSUS_MIN_SECONDS_BEFORE_CACHING;
|
start = start + dl_interval + min_sec_before_caching;
|
||||||
/* But try to get it before ours actually expires. */
|
/* But try to get it before ours actually expires. */
|
||||||
dl_interval = (c->valid_until - start) -
|
dl_interval = (c->valid_until - start) - min_sec_before_caching;
|
||||||
CONSENSUS_MIN_SECONDS_BEFORE_CACHING;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dl_interval < 1)
|
if (dl_interval < 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user