[tor-commits] [tor/maint-0.3.2] sched: Rate limit scheduler_bug_occurred()

nickm at torproject.org nickm at torproject.org
Thu Nov 2 14:32:24 UTC 2017


commit 6dc591a024e4dde8f4beafc7d42bdaeac996cca4
Author: David Goulet <dgoulet at torproject.org>
Date:   Thu Oct 26 14:44:44 2017 -0400

    sched: Rate limit scheduler_bug_occurred()
    
    Just in case we end up hitting a SCHED_BUG() multiple times, rate limit the
    log warning.
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 src/or/scheduler.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/or/scheduler.c b/src/or/scheduler.c
index 67911ff81..97b6d40b1 100644
--- a/src/or/scheduler.c
+++ b/src/or/scheduler.c
@@ -690,10 +690,21 @@ scheduler_bug_occurred(const channel_t *chan)
                  outbuf_len);
   }
 
-  log_warn(LD_BUG, "%s Num pending channels: %d. Channel in pending list: %s",
-           (chan != NULL) ? buf : "No channel in bug context.",
-           smartlist_len(channels_pending),
-           (smartlist_pos(channels_pending, chan) == -1) ? "no" : "yes");
+  {
+    char *msg;
+    /* Rate limit every 60 seconds. If we start seeing this every 60 sec, we
+     * know something is stuck/wrong. It *should* be loud but not too much. */
+    static ratelim_t rlimit = RATELIM_INIT(60);
+    if ((msg = rate_limit_log(&rlimit, approx_time()))) {
+      log_warn(LD_BUG, "%s Num pending channels: %d. "
+                       "Channel in pending list: %s.%s",
+               (chan != NULL) ? buf : "No channel in bug context.",
+               smartlist_len(channels_pending),
+               (smartlist_pos(channels_pending, chan) == -1) ? "no" : "yes",
+               msg);
+      tor_free(msg);
+    }
+  }
 }
 
 #ifdef TOR_UNIT_TESTS





More information about the tor-commits mailing list