aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastian Hahn <sebastian@torproject.org>2011-09-01 05:21:50 +0200
committerSebastian Hahn <sebastian@torproject.org>2011-09-01 17:21:50 +0200
commitd10ae9c02808c10b19bca66cdc1972616b2b6646 (patch)
tree67c8db67d97dd99da7bb72e9d729a607d0229038 /src
parentcc33ac362b1e0e046ddbeae30da1810aef781e8f (diff)
downloadtor-d10ae9c02808c10b19bca66cdc1972616b2b6646.tar
tor-d10ae9c02808c10b19bca66cdc1972616b2b6646.tar.gz
Don't update AccountingSoftLimitHitAt on startup
Add a "default" state which we use until we've decided whether we're live or hibernating. This allows us to properly track whether we're resuming a hibernation period or not. Fixes bug 2003.
Diffstat (limited to 'src')
-rw-r--r--src/or/hibernate.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index aebce4cc8..badc96ba8 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -41,14 +41,17 @@ typedef enum {
HIBERNATE_STATE_LOWBANDWIDTH=3,
/** We are hibernating, and we won't wake up till there's more bandwidth to
* use. */
- HIBERNATE_STATE_DORMANT=4
+ HIBERNATE_STATE_DORMANT=4,
+ /** We start out in state default, which means we havent decided which state
+ * we're in. */
+ HIBERNATE_STATE_INITIAL=5
} hibernate_state_t;
extern long stats_n_seconds_working; /* published uptime */
/** Are we currently awake, asleep, running out of bandwidth, or shutting
* down? */
-static hibernate_state_t hibernate_state = HIBERNATE_STATE_LIVE;
+static hibernate_state_t hibernate_state = HIBERNATE_STATE_INITIAL;
/** If are hibernating, when do we plan to wake up? Set to 0 if we
* aren't hibernating. */
static time_t hibernate_end_time = 0;
@@ -804,10 +807,12 @@ static void
hibernate_end(hibernate_state_t new_state)
{
tor_assert(hibernate_state == HIBERNATE_STATE_LOWBANDWIDTH ||
- hibernate_state == HIBERNATE_STATE_DORMANT);
+ hibernate_state == HIBERNATE_STATE_DORMANT ||
+ hibernate_state == HIBERNATE_STATE_INITIAL);
/* listeners will be relaunched in run_scheduled_events() in main.c */
- log_notice(LD_ACCT,"Hibernation period ended. Resuming normal activity.");
+ if (hibernate_state != HIBERNATE_STATE_INITIAL)
+ log_notice(LD_ACCT,"Hibernation period ended. Resuming normal activity.");
hibernate_state = new_state;
hibernate_end_time = 0; /* no longer hibernating */
@@ -939,7 +944,8 @@ consider_hibernation(time_t now)
/* Else, we aren't hibernating. See if it's time to start hibernating, or to
* go dormant. */
- if (hibernate_state == HIBERNATE_STATE_LIVE) {
+ if (hibernate_state == HIBERNATE_STATE_LIVE ||
+ hibernate_state == HIBERNATE_STATE_INITIAL) {
if (hibernate_soft_limit_reached()) {
log_notice(LD_ACCT,
"Bandwidth soft limit reached; commencing hibernation. "
@@ -951,6 +957,8 @@ consider_hibernation(time_t now)
"Commencing hibernation. We will wake up at %s local time.",
buf);
hibernate_go_dormant(now);
+ } else if (hibernate_state == HIBERNATE_STATE_INITIAL) {
+ hibernate_end(HIBERNATE_STATE_LIVE);
}
}