]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Avoid spurious bwhist parsing failures
authorNick Mathewson <nickm@torproject.org>
Tue, 1 Mar 2011 22:08:02 +0000 (17:08 -0500)
committerNick Mathewson <nickm@torproject.org>
Tue, 1 Mar 2011 22:08:02 +0000 (17:08 -0500)
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

index 3f4a70418bbd06700039714e97f154320422c3ce..61ae2c317ea1a1b6a9755dd3dde1650445a85a3f 100644 (file)
@@ -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) {