Преглед на файлове

Avoid spurious bwhist parsing failures

This should fix a bug that special ran into, where if your state file
didn't record period maxima, it would never decide that it had
successfully parsed itself unless you got lucky with your
uninitialized-variable values.

This patch also tries to improve error messags in the case where a
maximum value legitimately doesn't parse.
Nick Mathewson преди 14 години
родител
ревизия
6b7408178b
променени са 1 файла, в които са добавени 9 реда и са изтрити 3 реда
  1. 9 3
      src/or/rephist.c

+ 9 - 3
src/or/rephist.c

@@ -1602,18 +1602,24 @@ rep_hist_load_bwhist_state_section(bw_array_t *b,
     b->cur_obs_time = start;
     b->next_period = start + NUM_SECS_BW_SUM_INTERVAL;
     SMARTLIST_FOREACH_BEGIN(s_values, const char *, cp) {
+        const char *maxstr = NULL;
         v = tor_parse_uint64(cp, 10, 0, UINT64_MAX, &ok, NULL);
         if (have_maxima) {
-          const char *maxstr = smartlist_get(s_maxima, cp_sl_idx);
+          maxstr = smartlist_get(s_maxima, cp_sl_idx);
           mv = tor_parse_uint64(maxstr, 10, 0, UINT64_MAX, &ok_m, NULL);
           mv *= NUM_SECS_ROLLING_MEASURE;
         } else {
           /* No maxima known; guess average rate to be conservative. */
           mv = v / s_interval;
         }
-        if (!ok || !ok_m) {
+        if (!ok) {
           retval = -1;
-          log_notice(LD_HIST, "Could not parse '%s' into a number.'", cp);
+          log_notice(LD_HIST, "Could not parse value '%s' into a number.'",cp);
+        }
+        if (maxstr && !ok_m) {
+          retval = -1;
+          log_notice(LD_HIST, "Could not parse maximum '%s' into a number.'",
+                     maxstr);
         }
 
         if (start < now) {