|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
|