浏览代码

change SHUTDOWN_WAIT_LENGTH from a fixed 30 secs to a config option

svn:r3752
Roger Dingledine 20 年之前
父节点
当前提交
fe768d1d2a
共有 3 个文件被更改,包括 6 次插入4 次删除
  1. 1 0
      src/or/config.c
  2. 3 4
      src/or/hibernate.c
  3. 2 0
      src/or/or.h

+ 1 - 0
src/or/config.c

@@ -165,6 +165,7 @@ static config_var_t config_vars[] = {
   VAR("RecommendedVersions", LINELIST, RecommendedVersions,  NULL),
   VAR("RendNodes",           STRING,   RendNodes,            NULL),
   VAR("RendExcludeNodes",    STRING,   RendExcludeNodes,     NULL),
+  VAR("ShutdownWaitLength",  UINT,     ShutdownWaitLength,   "30"),
   VAR("SocksPort",           UINT,     SocksPort,            "9050"),
   VAR("SocksBindAddress",    LINELIST, SocksBindAddress,     NULL),
   VAR("SocksPolicy",         LINELIST, SocksPolicy,          NULL),

+ 3 - 4
src/or/hibernate.c

@@ -29,8 +29,6 @@ hibernating, phase 2:
 #define HIBERNATE_STATE_LOWBANDWIDTH 3
 #define HIBERNATE_STATE_DORMANT 4
 
-#define SHUTDOWN_WAIT_LENGTH 30 /* seconds */
-
 extern long stats_n_seconds_working; /* published uptime */
 
 static int hibernate_state = HIBERNATE_STATE_LIVE;
@@ -656,6 +654,7 @@ static int hibernate_soft_limit_reached(void)
  * connections, but we continue handling old ones. */
 static void hibernate_begin(int new_state, time_t now) {
   connection_t *conn;
+  or_options_t *options = get_options();
 
   if (new_state == HIBERNATE_STATE_EXITING &&
       hibernate_state != HIBERNATE_STATE_LIVE) {
@@ -678,8 +677,8 @@ static void hibernate_begin(int new_state, time_t now) {
   /* XXX upload rendezvous service descriptors with no intro points */
 
   if (new_state == HIBERNATE_STATE_EXITING) {
-    log(LOG_NOTICE,"Interrupt: will shut down in %d seconds. Interrupt again to exit now.", SHUTDOWN_WAIT_LENGTH);
-    hibernate_end_time = time(NULL) + SHUTDOWN_WAIT_LENGTH;
+    log(LOG_NOTICE,"Interrupt: will shut down in %d seconds. Interrupt again to exit now.", options->ShutdownWaitLength);
+    hibernate_end_time = time(NULL) + options->ShutdownWaitLength;
   } else { /* soft limit reached */
     hibernate_end_time = interval_end_time;
   }

+ 2 - 0
src/or/or.h

@@ -1059,6 +1059,8 @@ typedef struct {
   int ManageConnections; /**< Boolean: Does Tor attach new connections to
                           * circuits itself (1), or does it let the controller
                           * deal? (0) */
+  int ShutdownWaitLength; /**< When we get a SIGINT and we're a server, how
+                           * long do we wait before exiting? */
 } or_options_t;
 
 #define MAX_SOCKS_REPLY_LEN 1024