You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by wb...@apache.org on 2015/01/29 19:36:29 UTC
trafficserver git commit: TS-3339 Multithread access to PluginVC can
cause crash due to unprotected check of shutdown/close
Repository: trafficserver
Updated Branches:
refs/heads/master 2cfed613f -> 0f9dda615
TS-3339 Multithread access to PluginVC can cause crash due to unprotected check of shutdown/close
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/0f9dda61
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/0f9dda61
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/0f9dda61
Branch: refs/heads/master
Commit: 0f9dda615c2ae2fbc08156cc3c3d99175060ca14
Parents: 2cfed61
Author: William Bardwell <wb...@apache.org>
Authored: Thu Jan 29 12:09:55 2015 -0500
Committer: William Bardwell <wb...@apache.org>
Committed: Thu Jan 29 13:05:13 2015 -0500
----------------------------------------------------------------------
CHANGES | 2 ++
proxy/PluginVC.cc | 7 ++++++-
2 files changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0f9dda61/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index c08adb1..c35c2b3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
-*- coding: utf-8 -*-
Changes with Apache Traffic Server 5.3.0
+ *) [TS-3339] Multithread access to PluginVC can cause crash due to unprotected check of shutdown/close
+
*) [TS-3300] Add a @internal ACL filter.
*) [TS-2884] TSActionCancel() on TSNetAccept() causes spinning thread
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0f9dda61/proxy/PluginVC.cc
----------------------------------------------------------------------
diff --git a/proxy/PluginVC.cc b/proxy/PluginVC.cc
index 7b612c2..82f5e8e 100644
--- a/proxy/PluginVC.cc
+++ b/proxy/PluginVC.cc
@@ -601,7 +601,7 @@ PluginVC::process_read_side(bool other_side_call)
need_read_process = false;
- if (read_state.vio.op != VIO::READ || closed || read_state.shutdown) {
+ if (read_state.vio.op != VIO::READ || closed) {
return;
}
// Acquire the lock of the read side continuation
@@ -619,6 +619,11 @@ PluginVC::process_read_side(bool other_side_call)
Debug("pvc", "[%u] %s: process_read_side", core_obj->id, PVC_TYPE);
need_read_process = false;
+ // Check read_state.shutdown after the lock has been obtained.
+ if (read_state.shutdown) {
+ return;
+ }
+
// Check the state of our read buffer as well as ntodo
int64_t ntodo = read_state.vio.ntodo();
if (ntodo == 0) {