------------------------------------------------------------ revno: 13480 revision-id: rousskov@measurement-factory.com-20140625232128-k9smej1079bac3qj parent: squid3@treenet.co.nz-20140625120737-eg672m1j8oi31x04 committer: Alex Rousskov branch nick: trunk timestamp: Wed 2014-06-25 17:21:28 -0600 message: Documented a known bug that took a while to triage. No good fix is available. ------------------------------------------------------------ # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: rousskov@measurement-factory.com-20140625232128-\ # k9smej1079bac3qj # target_branch: http://bzr.squid-cache.org/bzr/squid3/trunk/ # testament_sha1: fc66ce4ef21840c15bf96df03cf6bb19bf3473d0 # timestamp: 2014-06-25 23:55:40 +0000 # source_branch: http://bzr.squid-cache.org/bzr/squid3/trunk/ # base_revision_id: squid3@treenet.co.nz-20140625120737-\ # eg672m1j8oi31x04 # # Begin patch === modified file 'src/client_side.h' --- src/client_side.h 2014-06-05 14:57:58 +0000 +++ src/client_side.h 2014-06-25 23:21:28 +0000 @@ -78,6 +78,12 @@ * * The individual processing actions are done by other Jobs which we * kick off as needed. + * + * XXX: If an async call ends the ClientHttpRequest job, ClientSocketContext + * (and ConnStateData) may not know about it, leading to segfaults and + * assertions like areAllContextsForThisConnection(). This is difficult to fix + * because ClientHttpRequest lacks a good way to communicate its ongoing + * destruction back to the ClientSocketContext which pretends to "own" *http. */ class ClientSocketContext : public RefCountable { @@ -91,7 +97,7 @@ void keepaliveNextRequest(); Comm::ConnectionPointer clientConnection; /// details about the client connection socket. - ClientHttpRequest *http; /* we own this */ + ClientHttpRequest *http; /* we pretend to own that job */ HttpReply *reply; char reqbuf[HTTP_REQBUF_SZ]; Pointer next;