Prechádzať zdrojové kódy

Resolve some hibernating-related XXXX009s.

svn:r2875
Nick Mathewson 20 rokov pred
rodič
commit
3e6edf20cc
4 zmenil súbory, kde vykonal 12 pridanie a 11 odobranie
  1. 4 0
      src/or/config.c
  2. 4 6
      src/or/hibernate.c
  3. 3 5
      src/or/main.c
  4. 1 0
      src/or/or.h

+ 4 - 0
src/or/config.c

@@ -310,6 +310,10 @@ options_act(void) {
     return -1;
   }
 
+  /* Set up accounting */
+  if (get_options()->AccountingMaxKB)
+    configure_accounting(time(NULL));
+
   if(retry_all_listeners(1) < 0) {
     log_fn(LOG_ERR,"Failed to bind one of the listener ports.");
     return -1;

+ 4 - 6
src/or/hibernate.c

@@ -83,7 +83,6 @@ static uint32_t expected_bandwidth_usage = 0;
 
 static void reset_accounting(time_t now);
 static int read_bandwidth_usage(void);
-static int record_bandwidth_usage(time_t now);
 static time_t start_of_accounting_period_after(time_t now);
 static time_t start_of_accounting_period_containing(time_t now);
 static void accounting_set_wakeup_time(void);
@@ -316,12 +315,11 @@ accounting_set_wakeup_time(void)
          (int)(unsigned char)digest[0], buf);
 }
 
-/* XXXX009 This should also get called on HUP and shutdown. */
 #define BW_ACCOUNTING_VERSION 1
 /** Save all our bandwidth tracking information to disk. Return 0 on
  * success, -1 on failure*/
-static int
-record_bandwidth_usage(time_t now)
+int
+accounting_record_bandwidth_usage(time_t now)
 {
   char buf[128];
   char fname[512];
@@ -483,7 +481,7 @@ static void hibernate_begin(int new_state, time_t now) {
   }
 
   hibernate_state = new_state;
-  record_bandwidth_usage(time(NULL));
+  accounting_record_bandwidth_usage(now);
 }
 
 /** Called when we've been hibernating and our timeout is reached. */
@@ -539,7 +537,7 @@ hibernate_go_dormant(time_t now) {
     connection_mark_for_close(conn);
   }
 
-  record_bandwidth_usage(time(NULL));
+  accounting_record_bandwidth_usage(now);
 }
 
 /** Called when hibernate_end_time has arrived. */

+ 3 - 5
src/or/main.c

@@ -737,6 +737,8 @@ static int do_hup(void) {
 
   log_fn(LOG_NOTICE,"Received sighup. Reloading config.");
   has_completed_circuit=0;
+  accounting_record_bandwidth_usage();
+
   /* first, reload config variables, in case they've changed */
   /* no need to provide argc/v, they've been cached inside init_from_config */
   if (init_from_config(0, NULL) < 0) {
@@ -793,11 +795,6 @@ static int do_main_loop(void) {
   stats_prev_global_read_bucket = global_read_bucket;
   stats_prev_global_write_bucket = global_write_bucket;
 
-  /*XXX009 move to options_act? */
-  /* Set up accounting */
-  if (get_options()->AccountingMaxKB)
-    configure_accounting(time(NULL));
-
   /* load the routers file, or assign the defaults. */
   if(router_reload_router_list()) {
     return -1;
@@ -1082,6 +1079,7 @@ void tor_cleanup(void) {
   if(options->PidFile && options->command == CMD_RUN_TOR)
     unlink(options->PidFile);
   crypto_global_cleanup();
+  accounting_record_bandwidth_usage();
 }
 
 /** Read/create keys as needed, and echo our fingerprint to stdout. */

+ 1 - 0
src/or/or.h

@@ -1327,6 +1327,7 @@ int dns_resolve(connection_t *exitconn);
 void configure_accounting(time_t now);
 void accounting_run_housekeeping(time_t now);
 void accounting_add_bytes(size_t n_read, size_t n_written, int seconds);
+int accounting_record_bandwidth_usage(time_t now);
 void hibernate_begin_shutdown(void);
 int we_are_hibernating(void);
 void consider_hibernation(time_t now);