Browse Source

Tweaks on 19435 fix:

   * Raise limit: 16k isn't all that high.
   * Don't log when limit exceded; log later on.
   * Say "over" when we log more than we say we log.
   * Add target version to changes file
Nick Mathewson 9 years ago
parent
commit
fb7f90c181
3 changed files with 7 additions and 11 deletions
  1. 2 2
      changes/bug19435
  2. 4 8
      src/common/util.c
  3. 1 1
      src/common/util.h

+ 2 - 2
changes/bug19435

@@ -2,5 +2,5 @@
     - Fix an integer overflow in the rate-limiter that caused displaying of
     - Fix an integer overflow in the rate-limiter that caused displaying of
       wrong number of suppressed messages (if there are too many of them).
       wrong number of suppressed messages (if there are too many of them).
       If the number of messages hits the limit of messages per interval the
       If the number of messages hits the limit of messages per interval the
-      rate-limiter drops a warning and doesn't count any further.
-      Fixes bug 19435.
+      rate-limiter doesn't count any further.
+      Fixes bug 19435; bugfix on 0.2.4.11-alpha.

+ 4 - 8
src/common/util.c

@@ -1995,12 +1995,7 @@ rate_limit_is_ready(ratelim_t *lim, time_t now)
     lim->n_calls_since_last_time = 0;
     lim->n_calls_since_last_time = 0;
     return res;
     return res;
   } else {
   } else {
-    if (lim->n_calls_since_last_time < RATELIM_TOOMANY) {
-      ++lim->n_calls_since_last_time;
-    } else if (lim->n_calls_since_last_time == RATELIM_TOOMANY) {
-      log_warn(LD_GENERAL,
-        "Enormously large number of messages (%d). It's probably a bug.",
-        RATELIM_TOOMANY);
+    if (lim->n_calls_since_last_time <= RATELIM_TOOMANY) {
       ++lim->n_calls_since_last_time;
       ++lim->n_calls_since_last_time;
     }
     }
 
 
@@ -2020,11 +2015,12 @@ rate_limit_log(ratelim_t *lim, time_t now)
       return tor_strdup("");
       return tor_strdup("");
     } else {
     } else {
       char *cp=NULL;
       char *cp=NULL;
+      const char *opt_over = (n >= RATELIM_TOOMANY) ? "over " : "";
       /* XXXX this is not exactly correct: the messages could have occurred
       /* XXXX this is not exactly correct: the messages could have occurred
        * any time between the old value of lim->allowed and now. */
        * any time between the old value of lim->allowed and now. */
       tor_asprintf(&cp,
       tor_asprintf(&cp,
-                   " [%d similar message(s) suppressed in last %d seconds]",
-                   n-1, lim->rate);
+                   " [%s%d similar message(s) suppressed in last %d seconds]",
+                   opt_over, n-1, lim->rate);
       return cp;
       return cp;
     }
     }
   } else {
   } else {

+ 1 - 1
src/common/util.h

@@ -292,7 +292,7 @@ typedef struct ratelim_t {
 } ratelim_t;
 } ratelim_t;
 
 
 #define RATELIM_INIT(r) { (r), 0, 0 }
 #define RATELIM_INIT(r) { (r), 0, 0 }
-#define RATELIM_TOOMANY (16*1000)
+#define RATELIM_TOOMANY (16*1000*1000)
 
 
 char *rate_limit_log(ratelim_t *lim, time_t now);
 char *rate_limit_log(ratelim_t *lim, time_t now);