> Hi,
>
> Under the following cases, some asynchronous exchanges won't come back
> (actually some are never sent). That means neither onResponseComplete(),
> onConnectionFailed(), onException() or onExpire() is invoked.
>
> 1. connection failed and HttpDestination::_idle queue has more than allowed
> MaxConnectionsPerAddress pending exchanges.
> Under this case, the current implementation just calls onConnectionFailed()
> of the first exchange from _idle queue. The rest become orphan and never get
> send.
> Possible fix could be; calling onConnectionFailed() for all exchanges in
> _idle queue, or just calls onConnectionFailed() of the first exchange from
> _idle queue then try to start a new connection if the _idle is still not
> empty
>
> 2. HttpConnection::send failed
> When this happened, connection was neither in the idle timer or timeout
> timer but still in HttpDestination::_connection queue, so this connection
> never got a chance to be removed and it occupied one slot from
> MaxConnectionsPerAddress. These connections will gradually eat up all the
> maximum allowed connections per address and no more exchanges can be send.
>
>
> It might be easier to see it in action. The attached files contain a quickly
> whipped up test program (to reproduce the problem) and patch against version
> 7.0.1.v20091125.