mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
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.
This commit is contained in:
+9
-3
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user