From: Amos Jeffries Date: Sat, 28 Aug 2010 07:12:52 +0000 (+1200) Subject: Straighten the tunnel pump read/write handlers X-Git-Tag: take08~55^2~124^2~74 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d01053a234ec6b5c1447318d14feac0aeffebb32;p=thirdparty%2Fsquid.git Straighten the tunnel pump read/write handlers At the point of calling FD may already be closed and draining of buffers underway. They also have internal consistency checks to cleanup the pump state if one or other conn is close early. remove invalid asserts and do debug outputs with safe non-dereference display of Comm::ConnectionPointer contents. --- diff --git a/src/tunnel.cc b/src/tunnel.cc index cc771f3ac1..7db4a76c44 100644 --- a/src/tunnel.cc +++ b/src/tunnel.cc @@ -227,13 +227,14 @@ TunnelStateData::ReadServer(int fd, char *buf, size_t len, comm_err_t errcode, i TunnelStateData *tunnelState = (TunnelStateData *)data; assert (cbdataReferenceValid (tunnelState)); - assert(errcode == COMM_ERR_CLOSING || fd == tunnelState->server.conn->fd); tunnelState->readServer(buf, len, errcode, xerrno); } void TunnelStateData::readServer(char *buf, size_t len, comm_err_t errcode, int xerrno) { + debugs(26, 3, HERE << server.conn << ", read " << len << " bytes"); + /* * Bail out early on COMM_ERR_CLOSING * - close handlers will tidy up for us @@ -242,8 +243,6 @@ TunnelStateData::readServer(char *buf, size_t len, comm_err_t errcode, int xerrn if (errcode == COMM_ERR_CLOSING) return; - debugs(26, 3, "tunnelReadServer: FD " << server.conn->fd << ", read " << len << " bytes"); - if (len > 0) { server.bytesIn(len); kb_incr(&statCounter.server.all.kbytes_in, len); @@ -279,16 +278,15 @@ TunnelStateData::ReadClient(int fd, char *buf, size_t len, comm_err_t errcode, i void TunnelStateData::readClient(char *buf, size_t len, comm_err_t errcode, int xerrno) { + debugs(26, 3, HERE << client.conn << ", read " << len << " bytes"); + /* * Bail out early on COMM_ERR_CLOSING * - close handlers will tidy up for us */ - if (errcode == COMM_ERR_CLOSING) return; - debugs(26, 3, "tunnelReadClient: FD " << client.conn << ", read " << len << " bytes"); - if (len > 0) { client.bytesIn(len); kb_incr(&statCounter.client_http.kbytes_in, len); @@ -332,14 +330,13 @@ TunnelStateData::WriteServerDone(int fd, char *buf, size_t len, comm_err_t flag, TunnelStateData *tunnelState = (TunnelStateData *)data; assert (cbdataReferenceValid (tunnelState)); - assert(fd == tunnelState->server.conn->fd); tunnelState->writeServerDone(buf, len, flag, xerrno); } void TunnelStateData::writeServerDone(char *buf, size_t len, comm_err_t flag, int xerrno) { - debugs(26, 3, "tunnelWriteServer: FD " << server.conn->fd << ", " << len << " bytes written"); + debugs(26, 3, HERE << server.conn << ", " << len << " bytes written"); if (flag == COMM_ERR_CLOSING) return; @@ -382,7 +379,6 @@ TunnelStateData::WriteClientDone(int fd, char *buf, size_t len, comm_err_t flag, TunnelStateData *tunnelState = (TunnelStateData *)data; assert (cbdataReferenceValid (tunnelState)); - assert(fd == tunnelState->client.conn->fd); tunnelState->writeClientDone(buf, len, flag, xerrno); } @@ -400,7 +396,7 @@ TunnelStateData::Connection::dataSent (size_t amount) void TunnelStateData::writeClientDone(char *buf, size_t len, comm_err_t flag, int xerrno) { - debugs(26, 3, "tunnelWriteClient: FD " << client.conn->fd << ", " << len << " bytes written"); + debugs(26, 3, HERE << client.conn << ", " << len << " bytes written"); if (flag == COMM_ERR_CLOSING) return;