[tor-commits] [tor/master] Avoid spurious bwhist parsing failures

nickm at torproject.org nickm at torproject.org
Tue Mar 1 22:15:27 UTC 2011


commit 6b7408178bf9cb3864cec14408d78e8374f26b68
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Mar 1 17:08:02 2011 -0500

    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.
---
 src/or/rephist.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/or/rephist.c b/src/or/rephist.c
index 3f4a704..61ae2c3 100644
--- a/src/or/rephist.c
+++ b/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) {





More information about the tor-commits mailing list