Merge branch 'maint-0.3.2' into release-0.3.2
This commit is contained in:
commit
2485f8dea4
|
@ -0,0 +1,6 @@
|
||||||
|
o Major bugfixes (scheduler, consensus):
|
||||||
|
- A logic in the code was preventing the scheduler subystem to properly
|
||||||
|
make a decision based on the latest consensus when it arrives. This lead
|
||||||
|
to the scheduler failing to notice any consensus parameters that might
|
||||||
|
change from one consensus to another. Fixes bug 24975; bugfix on
|
||||||
|
0.3.2.1-alpha.
|
|
@ -1564,7 +1564,11 @@ notify_control_networkstatus_changed(const networkstatus_t *old_c,
|
||||||
smartlist_free(changed);
|
smartlist_free(changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called when the consensus has changed from old_c to new_c. */
|
/* Called when the consensus has changed from old_c to new_c.
|
||||||
|
*
|
||||||
|
* IMPORTANT: This is called _after_ the new consensus has been set in the
|
||||||
|
* global state so this is safe for anything getting the latest consensus from
|
||||||
|
* that state. */
|
||||||
static void
|
static void
|
||||||
notify_networkstatus_changed(const networkstatus_t *old_c,
|
notify_networkstatus_changed(const networkstatus_t *old_c,
|
||||||
const networkstatus_t *new_c)
|
const networkstatus_t *new_c)
|
||||||
|
@ -1897,9 +1901,6 @@ networkstatus_set_current_consensus(const char *consensus,
|
||||||
|
|
||||||
const int is_usable_flavor = flav == usable_consensus_flavor();
|
const int is_usable_flavor = flav == usable_consensus_flavor();
|
||||||
|
|
||||||
if (is_usable_flavor) {
|
|
||||||
notify_networkstatus_changed(networkstatus_get_latest_consensus(), c);
|
|
||||||
}
|
|
||||||
if (flav == FLAV_NS) {
|
if (flav == FLAV_NS) {
|
||||||
if (current_ns_consensus) {
|
if (current_ns_consensus) {
|
||||||
networkstatus_copy_old_consensus_info(c, current_ns_consensus);
|
networkstatus_copy_old_consensus_info(c, current_ns_consensus);
|
||||||
|
@ -1922,6 +1923,13 @@ networkstatus_set_current_consensus(const char *consensus,
|
||||||
free_consensus = 0; /* avoid free */
|
free_consensus = 0; /* avoid free */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Called _after_ the consensus is set in its global variable so any
|
||||||
|
* functions called from this notification can safely get the latest
|
||||||
|
* consensus being the new one. */
|
||||||
|
if (is_usable_flavor) {
|
||||||
|
notify_networkstatus_changed(networkstatus_get_latest_consensus(), c);
|
||||||
|
}
|
||||||
|
|
||||||
waiting = &consensus_waiting_for_certs[flav];
|
waiting = &consensus_waiting_for_certs[flav];
|
||||||
if (waiting->consensus &&
|
if (waiting->consensus &&
|
||||||
waiting->consensus->valid_after <= c->valid_after) {
|
waiting->consensus->valid_after <= c->valid_after) {
|
||||||
|
|
Loading…
Reference in New Issue