Commit 331204e1 authored by David Goulet's avatar David Goulet 🐼
Browse files

Revert "cmux: Don't pick a marked for close circuit as active"

This reverts commit 4f1298e4.
parent 4f1298e4
Loading
Loading
Loading
Loading

changes/ticket25312

deleted100644 → 0
+0 −3
Original line number Diff line number Diff line
  o Minor bugfixes (circuit):
    - Fix a tiny window where a circuit can be chosen as active but is marked
      for close. Fixes bug 25312; bugfix on 0.2.4.4-alpha.
+2 −10
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@
#include <math.h>

#include "core/or/or.h"
#include "core/or/circuit_st.h"
#include "core/or/circuitmux.h"
#include "core/or/circuitmux_ewma.h"
#include "lib/crypt_ops/crypto_rand.h"
@@ -383,17 +382,10 @@ ewma_pick_active_circuit(circuitmux_t *cmux,

  pol = TO_EWMA_POL_DATA(pol_data);

  for (int i = 0; i < smartlist_len(pol->active_circuit_pqueue); i++) {
  if (smartlist_len(pol->active_circuit_pqueue) > 0) {
    /* Get the head of the queue */
    cell_ewma = smartlist_get(pol->active_circuit_pqueue, i);
    cell_ewma = smartlist_get(pol->active_circuit_pqueue, 0);
    circ = cell_ewma_to_circuit(cell_ewma);
    /* Don't send back closed circuit. This is possible because the circuit
     * is detached from the cmux before the circuit gets freed and not when
     * marked for close. Because of that, there is a window where a closed
     * circuit can be picked here. See #25312. */
    if (circ->marked_for_close) {
      continue;
    }
  }

  return circ;