|  | @@ -1678,7 +1678,7 @@ rep_hist_load_bwhist_state_section(bw_array_t *b,
 | 
	
		
			
				|  |  |            mv *= NUM_SECS_ROLLING_MEASURE;
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |            /* No maxima known; guess average rate to be conservative. */
 | 
	
		
			
				|  |  | -          mv = v / s_interval;
 | 
	
		
			
				|  |  | +          mv = (v / s_interval) * NUM_SECS_ROLLING_MEASURE;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (!ok) {
 | 
	
		
			
				|  |  |            retval = -1;
 | 
	
	
		
			
				|  | @@ -1691,11 +1691,24 @@ rep_hist_load_bwhist_state_section(bw_array_t *b,
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (start < now) {
 | 
	
		
			
				|  |  | -          add_obs(b, start, v);
 | 
	
		
			
				|  |  | +          time_t cur_start = start;
 | 
	
		
			
				|  |  | +          time_t actual_interval_len = s_interval;
 | 
	
		
			
				|  |  | +          uint64_t cur_val = 0;
 | 
	
		
			
				|  |  | +          /* Calculate the average per second. This is the best we can do
 | 
	
		
			
				|  |  | +           * because our state file doesn't have per-second resolution. */
 | 
	
		
			
				|  |  | +          if (start + s_interval > now)
 | 
	
		
			
				|  |  | +            actual_interval_len = now - start;
 | 
	
		
			
				|  |  | +          cur_val = v / actual_interval_len;
 | 
	
		
			
				|  |  | +          /* This is potentially inefficient, but since we don't do it very
 | 
	
		
			
				|  |  | +           * often it should be ok. */
 | 
	
		
			
				|  |  | +          while (cur_start < start + actual_interval_len) {
 | 
	
		
			
				|  |  | +            add_obs(b, cur_start, cur_val);
 | 
	
		
			
				|  |  | +            ++cur_start;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |            b->max_total = mv;
 | 
	
		
			
				|  |  |            /* This will result in some fairly choppy history if s_interval
 | 
	
		
			
				|  |  | -           * is notthe same as NUM_SECS_BW_SUM_INTERVAL. XXXX */
 | 
	
		
			
				|  |  | -          start += s_interval;
 | 
	
		
			
				|  |  | +           * is not the same as NUM_SECS_BW_SUM_INTERVAL. XXXX */
 | 
	
		
			
				|  |  | +          start += actual_interval_len;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      } SMARTLIST_FOREACH_END(cp);
 | 
	
		
			
				|  |  |    }
 |