summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-03-01 17:08:02 -0500
committerNick Mathewson <nickm@torproject.org>2011-03-01 17:08:02 -0500
commit6b7408178bf9cb3864cec14408d78e8374f26b68 (patch)
treebed42c598e32fe7b6c8513556d72f6560b99b891
parentaa178aae03048caf24ce5df4b2d643c7e7afdc7b (diff)
downloadtor-6b7408178bf9cb3864cec14408d78e8374f26b68.tar.gz
tor-6b7408178bf9cb3864cec14408d78e8374f26b68.zip
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.
-rw-r--r--src/or/rephist.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/or/rephist.c b/src/or/rephist.c
index 3f4a70418b..61ae2c317e 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) {