You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2015/07/31 16:09:39 UTC

[2/3] trafficserver git commit: Revert "TS-1007: SSLN Close called before TXN Close. This closes #249."

Revert "TS-1007: SSLN Close called before TXN Close.  This closes #249."

This reverts commit 2e0689748b496e54977fa99d2f7f4c75915da1df.

This breaks in multiple ways, see TS-3804 and TS-3805. Sudheer was able to fix
one, but we stopped after a few unsuccessful attempts on the second. We should
move out TS-1007, TS-3804 and TS-3805 until later.


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

Branch: refs/heads/6.0.x
Commit: 1d1eaa6988f31a46e5fea89ea49294f9486bfb14
Parents: 35f11dd
Author: Leif Hedstrom <zw...@apache.org>
Authored: Fri Jul 31 08:03:53 2015 -0600
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Fri Jul 31 08:03:53 2015 -0600

----------------------------------------------------------------------
 iocore/net/UnixNet.cc           |  5 +----
 proxy/http/HttpClientSession.cc |  8 --------
 proxy/http/HttpSM.cc            | 30 ++++++++----------------------
 proxy/spdy/SpdyClientSession.cc |  8 +++++---
 proxy/spdy/SpdyClientSession.h  |  7 ++++++-
 5 files changed, 20 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1d1eaa69/iocore/net/UnixNet.cc
----------------------------------------------------------------------
diff --git a/iocore/net/UnixNet.cc b/iocore/net/UnixNet.cc
index d35204f..3c454a9 100644
--- a/iocore/net/UnixNet.cc
+++ b/iocore/net/UnixNet.cc
@@ -672,10 +672,7 @@ NetHandler::_close_vc(UnixNetVConnection *vc, ink_hrtime now, int &handle_event,
     ++closed;
   } else {
     vc->next_inactivity_timeout_at = now;
-    // Found a case where the keep_alive_queue.head was NULL while running regression
-    // with non-standard configuration
-    if (keep_alive_queue.head)
-      keep_alive_queue.head->handleEvent(EVENT_IMMEDIATE, NULL);
+    keep_alive_queue.head->handleEvent(EVENT_IMMEDIATE, NULL);
     ++handle_event;
   }
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1d1eaa69/proxy/http/HttpClientSession.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpClientSession.cc b/proxy/http/HttpClientSession.cc
index 88b9e96..f02834c 100644
--- a/proxy/http/HttpClientSession.cc
+++ b/proxy/http/HttpClientSession.cc
@@ -92,11 +92,6 @@ HttpClientSession::destroy()
     HTTP_DECREMENT_DYN_STAT(http_current_client_connections_stat);
     conn_decrease = false;
   }
-  // Make sure we clean up ua_session in our HttpSM
-  // Otherwise, we will try to double free it in HttpSM::kill_this
-  if (current_reader) {
-    current_reader->ua_session = NULL;
-  }
 
   super::destroy();
   THREAD_FREE(this, httpClientSessionAllocator, this_thread());
@@ -332,9 +327,6 @@ HttpClientSession::do_io_close(int alerrno)
     HTTP_SUM_DYN_STAT(http_transactions_per_client_con, transact_count);
     HTTP_DECREMENT_DYN_STAT(http_current_client_connections_stat);
     conn_decrease = false;
-
-    // Should only be triggering the hooks for session close
-    // if this is a SSLNetVConnection or a UnixNetVConnection
     do_api_callout(TS_HTTP_SSN_CLOSE_HOOK);
   }
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1d1eaa69/proxy/http/HttpSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index c9b1322..9da84b5 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -3189,10 +3189,13 @@ HttpSM::tunnel_handler_ua(int event, HttpTunnelConsumer *c)
       ua_session->set_half_close_flag();
     }
 
-    // TS-1007, delaying ua_session->do_io_close to kill_this
-    // so the session_close hook occurs after the transaction close hook
-    // Also delaying the session release to kill_this in the keep_alive case
-    // so we don't lose any keep-alive opportunities
+    ua_session->do_io_close();
+    ua_session = NULL;
+  } else {
+    ink_assert(ua_buffer_reader != NULL);
+    ua_session->release(ua_buffer_reader);
+    ua_buffer_reader = NULL;
+    ua_session = NULL;
   }
 
   return 0;
@@ -6542,6 +6545,7 @@ HttpSM::kill_this()
       plugin_tunnel = NULL;
     }
 
+    ua_session = NULL;
     server_session = NULL;
 
     // So we don't try to nuke the state machine
@@ -6566,24 +6570,6 @@ HttpSM::kill_this()
   reentrancy_count--;
   ink_release_assert(reentrancy_count == 0);
 
-  // Delay the close of the user agent session, so the close session
-  // occurs after the close transaction
-  if (ua_session) {
-    // If this is a keep-alive client connection, just relase the client
-    // session rather than closing it.
-    if (t_state.client_info.keep_alive == HTTP_KEEPALIVE &&
-        (t_state.www_auth_content != HttpTransact::CACHE_AUTH_SERVE || ua_session->get_bound_ss())) {
-      // successful keep-alive, release the client session instead of destroying it
-      ink_assert(ua_buffer_reader != NULL);
-      ua_session->release(ua_buffer_reader);
-      ua_buffer_reader = NULL;
-    } else {
-      // Not keep alive, go ahead and shut it down
-      ua_session->do_io_close();
-    }
-    ua_session = NULL;
-  }
-
   // If the api shutdown & list removeal was synchronous
   //   then the value of kill_this_async_done has changed so
   //   we must check it again

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1d1eaa69/proxy/spdy/SpdyClientSession.cc
----------------------------------------------------------------------
diff --git a/proxy/spdy/SpdyClientSession.cc b/proxy/spdy/SpdyClientSession.cc
index 60c8e20..7b2cbb7 100644
--- a/proxy/spdy/SpdyClientSession.cc
+++ b/proxy/spdy/SpdyClientSession.cc
@@ -114,6 +114,7 @@ SpdyClientSession::init(NetVConnection *netvc)
 
   this->vc->set_inactivity_timeout(HRTIME_SECONDS(spdy_accept_no_activity_timeout));
   vc->add_to_keep_alive_queue();
+  SET_HANDLER(&SpdyClientSession::state_session_start);
 }
 
 void
@@ -197,11 +198,11 @@ SpdyClientSession::new_connection(NetVConnection *new_vc, MIOBuffer *iobuf, IOBu
   sm->resp_buffer = TSIOBufferCreate();
   sm->resp_reader = TSIOBufferReaderAlloc(sm->resp_buffer);
 
-  do_api_callout(TS_HTTP_SSN_START_HOOK);
+  eventProcessor.schedule_imm(sm, ET_NET);
 }
 
-void
-SpdyClientSession::start()
+int
+SpdyClientSession::state_session_start(int /* event */, void * /* edata */)
 {
   const spdylay_settings_entry entries[] = {
     {SPDYLAY_SETTINGS_MAX_CONCURRENT_STREAMS, SPDYLAY_ID_FLAG_SETTINGS_NONE, spdy_max_concurrent_streams},
@@ -228,6 +229,7 @@ SpdyClientSession::start()
   }
 
   TSVIOReenable(this->write_vio);
+  return EVENT_CONT;
 }
 
 int

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1d1eaa69/proxy/spdy/SpdyClientSession.h
----------------------------------------------------------------------
diff --git a/proxy/spdy/SpdyClientSession.h b/proxy/spdy/SpdyClientSession.h
index 12a5c79..516a34c 100644
--- a/proxy/spdy/SpdyClientSession.h
+++ b/proxy/spdy/SpdyClientSession.h
@@ -117,7 +117,12 @@ public:
     ink_release_assert(false);
     return NULL;
   }
-  void start();
+
+  void
+  start()
+  {
+    ink_release_assert(false);
+  }
 
   void do_io_close(int lerrno = -1);
   void