]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r13937@catbus: nickm | 2007-07-27 12:43:36 -0400
authorNick Mathewson <nickm@torproject.org>
Fri, 27 Jul 2007 18:33:30 +0000 (18:33 +0000)
committerNick Mathewson <nickm@torproject.org>
Fri, 27 Jul 2007 18:33:30 +0000 (18:33 +0000)
 Maintain a detached-signatures document along with pending consensus document.  Add a dirvote_free_all() to clean up static vars in dirvote.c

svn:r10945

src/or/dirvote.c
src/or/main.c
src/or/or.h

index 5d89b473d41f677fd09708534784106d1dfdbbfa..8be8a57757a246f9538aeec66e8cb4f91ea3ee3e 100644 (file)
@@ -1065,6 +1065,8 @@ static smartlist_t *pending_vote_list = NULL;
 /** DOCDOC */
 static char *pending_consensus_body = NULL;
 /** DOCDOC */
+static char *pending_consensus_signatures = NULL;
+/** DOCDOC */
 static networkstatus_vote_t *pending_consensus = NULL;
 
 /** DOCDOC */
@@ -1177,7 +1179,7 @@ dirvote_compute_consensus(void)
   /* Have we got enough votes to try? */
   int n_votes, n_voters;
   smartlist_t *votes = NULL;
-  char *consensus_body = NULL;
+  char *consensus_body = NULL, *signatures = NULL;
   networkstatus_vote_t *consensus = NULL;
   authority_cert_t *my_cert;
 
@@ -1207,9 +1209,16 @@ dirvote_compute_consensus(void)
     log_warn(LD_DIR, "Couldn't parse consensus we generated!");
     goto err;
   }
+  signatures = networkstatus_get_detached_signatures(consensus);
+  if (!signatures) {
+    log_warn(LD_DIR, "Couldn't extract signatures.");
+    goto err;
+  }
 
   tor_free(pending_consensus_body);
   pending_consensus_body = consensus_body;
+  tor_free(pending_consensus_signatures);
+  pending_consensus_signatures = signatures;
 
   if (pending_consensus)
     networkstatus_vote_free(pending_consensus);
@@ -1220,8 +1229,25 @@ dirvote_compute_consensus(void)
   if (votes)
     smartlist_free(votes);
   tor_free(consensus_body);
+  tor_free(signatures);
   networkstatus_vote_free(consensus);
 
   return -1;
 }
 
+/** Release all static storage held in dirvote.c */
+void
+dirvote_free_all(void)
+{
+  dirvote_clear_pending_votes();
+  if (pending_vote_list) {
+    smartlist_free(pending_vote_list);
+    pending_vote_list = NULL;
+  }
+  tor_free(pending_consensus_body);
+  tor_free(pending_consensus_signatures);
+  if (pending_consensus) {
+    networkstatus_vote_free(pending_consensus);
+    pending_consensus = NULL;
+  }
+}
index 6e449e0ef91bd92b3460d9603539085749f35bd4..e252383074dd09ff1992b038e54bf7848c17cf75 100644 (file)
@@ -1764,6 +1764,7 @@ tor_free_all(int postfork)
   if (!postfork) {
     evdns_shutdown(1);
   }
+  dirvote_free_all();
   routerlist_free_all();
   addressmap_free_all();
   set_exit_redirects(NULL); /* free the registered exit redirects */
index e54b39b96ae5a5024c60874e20ad6c9f5bf7101a..8b46391e7fd9b04186f9ec29b841de0f56a18110 100644 (file)
@@ -2793,6 +2793,8 @@ format_networkstatus_vote(crypto_pk_env_t *private_key,
 
 /********************************* dirvote.c ************************/
 
+void dirvote_free_all(void);
+
 /* vote manipulation */
 void networkstatus_vote_free(networkstatus_vote_t *ns);
 char *networkstatus_compute_consensus(smartlist_t *votes,