You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2012/03/26 01:02:03 UTC
git commit: TS-857: fix race in do_io_close: move read of member
above set of 'closed'
Updated Branches:
refs/heads/master 7d6d26307 -> 2731f6bfa
TS-857: fix race in do_io_close: move read of member above set of 'closed'
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/2731f6bf
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/2731f6bf
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/2731f6bf
Branch: refs/heads/master
Commit: 2731f6bfabfb983af3ddb8a48cde537d7503f283
Parents: 7d6d263
Author: jplevyak@apache.org <jp...@apache.org>
Authored: Sun Mar 25 16:01:19 2012 -0700
Committer: John Plevyak <jp...@acm.org>
Committed: Sun Mar 25 16:01:19 2012 -0700
----------------------------------------------------------------------
iocore/net/UnixNetVConnection.cc | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2731f6bf/iocore/net/UnixNetVConnection.cc
----------------------------------------------------------------------
diff --git a/iocore/net/UnixNetVConnection.cc b/iocore/net/UnixNetVConnection.cc
index 30ed932..b74defa 100644
--- a/iocore/net/UnixNetVConnection.cc
+++ b/iocore/net/UnixNetVConnection.cc
@@ -574,6 +574,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;
@@ -582,11 +585,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