Commit 1b3bddd0 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

scan-build: Have clear_pending_onions walk the lists more obviously

As it stands, it relies on the fact that onion_queue_entry_remove
will magically remove each onionskin from the right list.  This
patch changes the logic to be more resilient to possible bugs in
onion_queue_entry_remove, and less confusing to static analysis tools.
parent 78bc814c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -329,12 +329,14 @@ onion_queue_entry_remove(onion_queue_t *victim)
void
clear_pending_onions(void)
{
  onion_queue_t *victim;
  onion_queue_t *victim, *next;
  int i;
  for (i=0; i<=MAX_ONION_HANDSHAKE_TYPE; i++) {
    while ((victim = TOR_TAILQ_FIRST(&ol_list[i]))) {
    for (victim = TOR_TAILQ_FIRST(&ol_list[i]); victim; victim = next) {
      next = TOR_TAILQ_NEXT(victim,next);
      onion_queue_entry_remove(victim);
    }
    tor_assert(TOR_TAILQ_EMPTY(&ol_list[i]));
  }
  memset(ol_entries, 0, sizeof(ol_entries));
}