Skip to content

edge: Remove wrong bug warn when processing pending streams

David Goulet requested to merge dgoulet/tor:ticket34083_047_01 into main

The connection_ap_attach_pending() function processes all pending streams in the pending_entry_connections list. It first copy the pointer and then allocates a brand new empty list.

It then iterates over that copy pointer to try to attach entry connections onto any fitting circuits using connection_ap_handshake_attach_circuit().

That very function, for onion service, can lead to flagging all streams of the same onion service to be put in state RENDDESC_WAIT from CIRCUIT_WAIT. By doing so, it also tries to remove them from the pending_entry_connections but at that point it is already empty.

Problem is that the we are iterating over the previous pending_entry_connections which contains the streams that have just changed state and are no longer in CIRCUIT_WAIT.

This lead to this bug warning occuring a lot on busy services:

May 01 08:55:43.000 [warn] connection_ap_attach_pending(): Bug: 0x55d8764ae550 is no longer in circuit_wait. Its current state is waiting for rendezvous desc. Why is it on pending_entry_connections? (on Tor 0.4.4.0-alpha-dev )

This fix is minimal and basically allow a state to be not CIRCUIT_WAIT and move on to the next one without logging a warning. Because the pending_entry_connections is emptied before processing, there is no chance for a streams to be stuck there forever thus it is OK to ignore streams not in the right state.

Fixes #34083 (closed)

Signed-off-by: David Goulet dgoulet@torproject.org

Merge request reports