The problem was different: With classic comm code of squid3 when the comm_close for a fd called then: 1) fd marked as closing, read and write handlers called with COMM_ERR_CLOSING 2) comm_close handlers called 3) the fd closed and the fdc_table[fd] initialized.
Using async calls (current code) the above become: 1) fd marked as closing, read and write handlers with COMM_ERR_CLOSING parameter scheduled for execution 2) comm_close handlers scheduled for execution 3) closing fd and initializing the fdc_table[fd] operations scheduled for execution And after some time: - read/write handlers called with COMM_ERR_CLOSING - comm_close handlers called - The fd closed and fdc_table[fd] initialized. If the fd closed before the comm_close handlers executed bad thinks happens..... Henrik Nordström wrote: > > And why is this needed? The sendComplete callback should be invalidated > if the HTTP connection state is no longer there. > > Adding this reshedule adds a noticeable overhead an delay, plus makes > tracing of the code flow more difficult. The hope is that we are gaining in stability and less complex code in upper levels.
