TS-3665: Redirect logic causing debug asserts

(cherry picked from commit e46eea5f1eee107a19a8412fef8b967a2f162457)


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/fd1f7543
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/fd1f7543
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/fd1f7543

Branch: refs/heads/5.3.x
Commit: fd1f7543b355a3c8f5fe1d65f04dee19383e1d1d
Parents: 75f2860
Author: shinrich <[email protected]>
Authored: Tue Jun 9 08:16:47 2015 -0500
Committer: Phil Sorber <[email protected]>
Committed: Mon Jun 29 13:48:01 2015 -0600

----------------------------------------------------------------------
 proxy/http/HttpCacheSM.cc | 8 ++++++--
 proxy/http/HttpSM.cc      | 2 --
 2 files changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/fd1f7543/proxy/http/HttpCacheSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpCacheSM.cc b/proxy/http/HttpCacheSM.cc
index 1025796..ff02e3a 100644
--- a/proxy/http/HttpCacheSM.cc
+++ b/proxy/http/HttpCacheSM.cc
@@ -106,7 +106,11 @@ HttpCacheSM::state_cache_open_read(int event, void *data)
   switch (event) {
   case CACHE_EVENT_OPEN_READ:
     HTTP_INCREMENT_DYN_STAT(http_current_cache_connections_stat);
-    ink_assert(cache_read_vc == NULL);
+    ink_assert((cache_read_vc == NULL) || 
master_sm->t_state.redirect_info.redirect_in_process);
+    if (cache_read_vc) {
+      // redirect follow in progress, close the previous cache_read_vc
+      close_read();
+    }
     open_read_cb = true;
     cache_read_vc = (CacheVConnection *)data;
     master_sm->handleEvent(event, data);
@@ -267,7 +271,7 @@ HttpCacheSM::open_write(URL *url, HTTPHdr *request, 
CacheHTTPInfo *old_info, tim
 {
   SET_HANDLER(&HttpCacheSM::state_cache_open_write);
   ink_assert(pending_action == NULL);
-  ink_assert(cache_write_vc == NULL);
+  ink_assert((cache_write_vc == NULL) || 
master_sm->t_state.redirect_info.redirect_in_process);
   // INKqa12119
   open_write_cb = false;
   open_write_tries++;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/fd1f7543/proxy/http/HttpSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 048b41d..096f2c5 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -1584,7 +1584,6 @@ HttpSM::handle_api_return()
   case HttpTransact::SM_ACTION_REDIRECT_READ: {
     // Clean up from any communication with previous servers
     release_server_session();
-    // tunnel.deallocate_redirect_postdata_buffers();
 
     call_transact_and_set_next_state(HttpTransact::HandleRequest);
     break;
@@ -4473,7 +4472,6 @@ HttpSM::do_cache_prepare_action(HttpCacheSM *c_sm, 
CacheHTTPInfo *object_read_in
   bool restore_client_request = false;
 
   ink_assert(!pending_action);
-  ink_assert(c_sm->cache_write_vc == NULL);
 
   if (t_state.api_lock_url == HttpTransact::LOCK_URL_FIRST) {
     if (t_state.redirect_info.redirect_in_process) {

Reply via email to