Repository: trafficserver Updated Branches: refs/heads/master cec7e3c2a -> e895bcc6a
TS-3573: Fix connection leak Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/e895bcc6 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/e895bcc6 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/e895bcc6 Branch: refs/heads/master Commit: e895bcc6aa64e595c31f682a5acf8e6537235c89 Parents: cec7e3c Author: shinrich <shinr...@yahoo-inc.com> Authored: Thu Apr 30 13:19:07 2015 -0500 Committer: shinrich <shinr...@yahoo-inc.com> Committed: Thu Apr 30 13:19:07 2015 -0500 ---------------------------------------------------------------------- CHANGES | 2 ++ iocore/net/UnixNetVConnection.cc | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e895bcc6/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index eae4f99..cb8ba65 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ -*- coding: utf-8 -*- Changes with Apache Traffic Server 6.0.0 + *) [TS-3575]: Fix connection leak. + *) [TS-3538]: Perform server certificate validity check. *) [TS-3549]: Configurable option to avoid thundering herd problem http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e895bcc6/iocore/net/UnixNetVConnection.cc ---------------------------------------------------------------------- diff --git a/iocore/net/UnixNetVConnection.cc b/iocore/net/UnixNetVConnection.cc index ae4d028..2e44010 100644 --- a/iocore/net/UnixNetVConnection.cc +++ b/iocore/net/UnixNetVConnection.cc @@ -143,7 +143,7 @@ read_signal_and_update(int event, UnixNetVConnection *vc) case VC_EVENT_ERROR: case VC_EVENT_ACTIVE_TIMEOUT: case VC_EVENT_INACTIVITY_TIMEOUT: - Debug("inactivity_cop", "event %d: null cont, closing vc %p", event, vc); + Debug("inactivity_cop", "event %d: null read.vio cont, closing vc %p", event, vc); vc->closed = 1; break; default: @@ -166,8 +166,23 @@ static inline int write_signal_and_update(int event, UnixNetVConnection *vc) { vc->recursion++; - if (NULL != vc->write.vio._cont) + if (vc->write.vio._cont) { vc->write.vio._cont->handleEvent(event, &vc->write.vio); + } else { + switch (event) { + case VC_EVENT_EOS: + case VC_EVENT_ERROR: + case VC_EVENT_ACTIVE_TIMEOUT: + case VC_EVENT_INACTIVITY_TIMEOUT: + Debug("inactivity_cop", "event %d: null write.vio cont, closing vc %p", event, vc); + vc->closed = 1; + break; + default: + Error("Unexpected event %d for vc %p", event, vc); + ink_release_assert(0); + break; + } + } if (!--vc->recursion && vc->closed) { /* BZ 31932 */ ink_assert(vc->thread == this_ethread());