[tor-commits] [tor/master] If writing a heartbeat message fails, retry after MIN_HEARTBEAT_PERIOD.

nickm at torproject.org nickm at torproject.org
Thu Jul 13 20:58:50 UTC 2017


commit 9de12397cf4882e83f199616d52ec9c90e0d6d8e
Author: Isis Lovecruft <isis at torproject.org>
Date:   Wed Jul 12 02:40:24 2017 +0000

    If writing a heartbeat message fails, retry after MIN_HEARTBEAT_PERIOD.
    
     * FIXES #19476.
---
 src/or/config.c |  4 ----
 src/or/config.h |  4 ++++
 src/or/main.c   | 12 ++++++++----
 3 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/or/config.c b/src/or/config.c
index 5b5bb90..5da871d 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -2804,10 +2804,6 @@ compute_publishserverdescriptor(or_options_t *options)
  * will generate too many circuits and potentially overload the network. */
 #define MIN_CIRCUIT_STREAM_TIMEOUT 10
 
-/** Lowest allowable value for HeartbeatPeriod; if this is too low, we might
- * expose more information than we're comfortable with. */
-#define MIN_HEARTBEAT_PERIOD (30*60)
-
 /** Lowest recommended value for CircuitBuildTimeout; if it is set too low
  * and LearnCircuitBuildTimeout is off, the failure rate for circuit
  * construction may be very high.  In that case, if it is set below this
diff --git a/src/or/config.h b/src/or/config.h
index 27aec7f..3cfa7c4 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -18,6 +18,10 @@
 #define KERNEL_MAY_SUPPORT_IPFW
 #endif
 
+/** Lowest allowable value for HeartbeatPeriod; if this is too low, we might
+ * expose more information than we're comfortable with. */
+#define MIN_HEARTBEAT_PERIOD (30*60)
+
 MOCK_DECL(const char*, get_dirportfrontpage, (void));
 MOCK_DECL(const or_options_t *, get_options, (void));
 MOCK_DECL(or_options_t *, get_options_mutable, (void));
diff --git a/src/or/main.c b/src/or/main.c
index 4116740..f7b9cc8 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -2060,6 +2060,9 @@ check_fw_helper_app_callback(time_t now, const or_options_t *options)
 
 /**
  * Periodic callback: write the heartbeat message in the logs.
+ *
+ * If writing the heartbeat message to the logs fails for some reason, retry
+ * again after <b>MIN_HEARTBEAT_PERIOD</b> seconds.
  */
 static int
 heartbeat_callback(time_t now, const or_options_t *options)
@@ -2078,12 +2081,13 @@ heartbeat_callback(time_t now, const or_options_t *options)
   }
 
   /* Write the heartbeat message */
-  int r = log_heartbeat(now);
-  if (r == 0) {
+  if (log_heartbeat(now) == 0) {
     return options->HeartbeatPeriod;
+  } else {
+    /* If we couldn't write the heartbeat log message, try again in the minimum
+     * interval of time. */
+    return MIN_HEARTBEAT_PERIOD;
   }
-
-  return PERIODIC_EVENT_NO_UPDATE;
 }
 
 #define CDM_CLEAN_CALLBACK_INTERVAL 600





More information about the tor-commits mailing list