Merge remote-tracking branch 'dgoulet/bug24975_032_01' into maint-0.3.2

This commit is contained in:
Nick Mathewson
2018-01-31 13:46:58 -05:00
2 changed files with 18 additions and 4 deletions
+12 -4
View File
@@ -1564,7 +1564,11 @@ notify_control_networkstatus_changed(const networkstatus_t *old_c,
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
notify_networkstatus_changed(const networkstatus_t *old_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();
if (is_usable_flavor) {
notify_networkstatus_changed(networkstatus_get_latest_consensus(), c);
}
if (flav == FLAV_NS) {
if (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 */
}
/* 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];
if (waiting->consensus &&
waiting->consensus->valid_after <= c->valid_after) {