~rousskov/squid/3p2-plus

Viewing all changes in revision 10846.

  • Committer: Alex Rousskov
  • Date: 2010-12-03 16:31:53 UTC
  • Revision ID: rousskov@measurement-factory.com-20101203163153-7egecfg1zhkhzhrv
Author: Stefan Fritsch <sf@sfritsch.de>
Bug 3096: Squid destroys CbDataList<DeferredRead> objects too late

When server download speed exceeds client download speed, Squid creates a
CbDataList<DeferredRead> object and associates a comm_close handler with it.
When the server kicks the deferred read, the comm_close handler is canceled.
This create/cancel sequence happens every time the server-side code wants to
read but has to wait for the client, which may happen hundreds of times per
second.

Before this change, those canceled comm_close handlers were not removed from
Comm until the end of the entire server transaction, possibly accumulating
thousands of CbDataList<DeferredRead> objects tied to the socket descriptor
via the canceled but still stored close handler.

comm_remove_close_handler now immediately removes canceled close handlers to
avoid their accumulation.

same as trunk r11073

expand all expand all

Show diffs side-by-side

added added

removed removed

Lines of Context: