Commit 285addbd authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Fix some issues in rate-limiting noticed by Sebastian

parent ba9c1275
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1584,10 +1584,10 @@ ftime_definitely_before(time_t now, time_t when)
/** If the rate-limiter <b>lim</b> is ready at <b>now</b>, return the number
 * of calls to rate_limit_is_ready (including this one!) since the last time
 * rate_limit_is_ready returned nonzero.  Otherwise return 0. */
int
static int
rate_limit_is_ready(ratelim_t *lim, time_t now)
{
  if (lim->rate + lim->last_allowed >= now) {
  if (lim->rate + lim->last_allowed <= now) {
    int res = lim->n_calls_since_last_time + 1;
    lim->last_allowed = now;
    lim->n_calls_since_last_time = 0;
+0 −1
Original line number Diff line number Diff line
@@ -277,7 +277,6 @@ typedef struct ratelim_t {

#define RATELIM_INIT(r) { (r), 0, 0 }

int rate_limit_is_ready(ratelim_t *lim, time_t now);
char *rate_limit_log(ratelim_t *lim, time_t now);

/* File helpers */
+3 −1
Original line number Diff line number Diff line
@@ -288,7 +288,9 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)

    /* hand it off to the cpuworkers, and then return. */
    if (assign_onionskin_to_cpuworker(NULL, circ, onionskin) < 0) {
      static ratelim_t handoff_warning = RATELIM_INIT(3600);
#define WARN_HANDOFF_FAILURE_INTERVAL (6*60*60)
      static ratelim_t handoff_warning =
        RATELIM_INIT(WARN_HANDOFF_FAILURE_INTERVAL);
      char *m;
      if ((m = rate_limit_log(&handoff_warning, approx_time()))) {
        log_warn(LD_GENERAL,"Failed to hand off onionskin. Closing.%s",m);