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