Updated Branches: refs/heads/3.0.x 6f8c3d33f -> 245d197e4
TS-857: race in UnixNetVConnection::do_io_close(), Review: jplevyak, zym, zwoop, Backport: briang Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/245d197e Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/245d197e Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/245d197e Branch: refs/heads/3.0.x Commit: 245d197e401f70936a47cdb66682a72b801596c3 Parents: 6f8c3d3 Author: Brian Geffon <[email protected]> Authored: Thu Apr 12 16:31:03 2012 -0700 Committer: Brian Geffon <[email protected]> Committed: Thu Apr 12 16:31:03 2012 -0700 ---------------------------------------------------------------------- CHANGES | 3 +++ STATUS | 5 ----- iocore/net/UnixNetVConnection.cc | 10 +++++----- 3 files changed, 8 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/245d197e/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index 2419ac0..8eeae9c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,8 @@ -*- coding: utf-8 -*- Changes with Apache Traffic Server 3.0.5 + + *) [TS-857] race condition UnixNetVConnection::do_io_close() + *) [TS-1158] race condition UnixNetVConnection::mainEvent() when handling an inactivity timeout http://git-wip-us.apache.org/repos/asf/trafficserver/blob/245d197e/STATUS ---------------------------------------------------------------------- diff --git a/STATUS b/STATUS index 0486e53..4c53676 100644 --- a/STATUS +++ b/STATUS @@ -41,11 +41,6 @@ A list of all bugs open for the next v3.0.4 release can be found at PATCHES ACCEPTED TO BACKPORT FROM TRUNK: - *) race condition UnixNetVConnection::do_io_close() - master SHA: 2731f6bfabfb983af3ddb8a48cde537d7503f283 - Jira: https://issues.apache.org/jira/browse/TS-857 - +1: jplevyak, zym, zwoop - *) build fails on GCC 4.7 and clang master SHA: fe1da80b94d368343174ada8b137a0c4ae1c387e fe1da80b94d368343174ada8b137a0c4ae1c387e http://git-wip-us.apache.org/repos/asf/trafficserver/blob/245d197e/iocore/net/UnixNetVConnection.cc ---------------------------------------------------------------------- diff --git a/iocore/net/UnixNetVConnection.cc b/iocore/net/UnixNetVConnection.cc index 8b290d0..d99e226 100644 --- a/iocore/net/UnixNetVConnection.cc +++ b/iocore/net/UnixNetVConnection.cc @@ -554,6 +554,9 @@ UnixNetVConnection::do_io_close(int alerrno /* = -1 */ ) write.vio.nbytes = 0; write.vio.op = VIO::NONE; + EThread *t = this_ethread(); + bool close_inline = !recursion && nh->mutex->thread_holding == t; + INK_WRITE_MEMORY_BARRIER; if (alerrno && alerrno != -1) this->lerrno = alerrno; @@ -562,11 +565,8 @@ UnixNetVConnection::do_io_close(int alerrno /* = -1 */ ) else closed = -1; - if (!recursion) { - EThread *t = this_ethread(); - if (nh->mutex->thread_holding == t) - close_UnixNetVConnection(this, t); - } + if (close_inline) + close_UnixNetVConnection(this, t); } void
