You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by su...@apache.org on 2016/01/29 02:44:27 UTC

trafficserver git commit: [TS-4160] Reset the txn request/response handles at each hook, since core may destroy them. [Forced Update!]

Repository: trafficserver
Updated Branches:
  refs/heads/ts-4160 dbe6253c9 -> 5bfe22907 (forced update)


[TS-4160] Reset the txn request/response handles at each hook, since core may destroy them.

[TS-4160] clean up the code and initialize all handles for all hooks.


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

Branch: refs/heads/ts-4160
Commit: 5bfe22907b250c4934ab15da96c9cbca5f27decb
Parents: f8ce9e9
Author: Sudheer Vinukonda <su...@yahoo-inc.com>
Authored: Fri Jan 29 01:00:10 2016 +0000
Committer: Sudheer Vinukonda <su...@yahoo-inc.com>
Committed: Fri Jan 29 01:43:45 2016 +0000

----------------------------------------------------------------------
 lib/atscppapi/src/Transaction.cc    | 10 ++++++++++
 lib/atscppapi/src/utils_internal.cc | 23 +++++++++++++++--------
 2 files changed, 25 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5bfe2290/lib/atscppapi/src/Transaction.cc
----------------------------------------------------------------------
diff --git a/lib/atscppapi/src/Transaction.cc b/lib/atscppapi/src/Transaction.cc
index b9396ef..4170fc0 100644
--- a/lib/atscppapi/src/Transaction.cc
+++ b/lib/atscppapi/src/Transaction.cc
@@ -455,6 +455,8 @@ void
 Transaction::initServerRequest()
 {
   static initializeHandles initializeServerRequestHandles(TSHttpTxnServerReqGet);
+  state_->server_request_hdr_buf_ = NULL;
+  state_->server_request_hdr_loc_ = NULL;
   if (initializeServerRequestHandles(state_->txn_, state_->server_request_hdr_buf_, state_->server_request_hdr_loc_,
                                      "server request")) {
     LOG_DEBUG("Initializing server request");
@@ -466,6 +468,8 @@ void
 Transaction::initServerResponse()
 {
   static initializeHandles initializeServerResponseHandles(TSHttpTxnServerRespGet);
+  state_->server_response_hdr_buf_ = NULL;
+  state_->server_response_hdr_loc_ = NULL;
   if (initializeServerResponseHandles(state_->txn_, state_->server_response_hdr_buf_, state_->server_response_hdr_loc_,
                                       "server response")) {
     LOG_DEBUG("Initializing server response");
@@ -477,6 +481,8 @@ void
 Transaction::initClientResponse()
 {
   static initializeHandles initializeClientResponseHandles(TSHttpTxnClientRespGet);
+  state_->client_response_hdr_buf_ = NULL;
+  state_->client_response_hdr_loc_ = NULL;
   if (initializeClientResponseHandles(state_->txn_, state_->client_response_hdr_buf_, state_->client_response_hdr_loc_,
                                       "client response")) {
     LOG_DEBUG("Initializing client response");
@@ -488,6 +494,8 @@ void
 Transaction::initCachedRequest()
 {
   static initializeHandles initializeCachedRequestHandles(TSHttpTxnCachedReqGet);
+  state_->cached_request_hdr_buf_ = NULL;
+  state_->cached_request_hdr_loc_ = NULL;
   if (initializeCachedRequestHandles(state_->txn_, state_->cached_request_hdr_buf_, state_->cached_request_hdr_loc_,
                                      "cached request")) {
     LOG_DEBUG("Initializing cached request");
@@ -499,6 +507,8 @@ void
 Transaction::initCachedResponse()
 {
   static initializeHandles initializeCachedResponseHandles(TSHttpTxnCachedRespGet);
+  state_->cached_response_hdr_buf_ = NULL;
+  state_->cached_response_hdr_loc_ = NULL;
   if (initializeCachedResponseHandles(state_->txn_, state_->cached_response_hdr_buf_, state_->cached_response_hdr_loc_,
                                       "cached response")) {
     LOG_DEBUG("Initializing cached response");

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5bfe2290/lib/atscppapi/src/utils_internal.cc
----------------------------------------------------------------------
diff --git a/lib/atscppapi/src/utils_internal.cc b/lib/atscppapi/src/utils_internal.cc
index ff0012e..dd7bca4 100644
--- a/lib/atscppapi/src/utils_internal.cc
+++ b/lib/atscppapi/src/utils_internal.cc
@@ -43,6 +43,18 @@ namespace
 const int MAX_TXN_ARG = 15;
 const int TRANSACTION_STORAGE_INDEX = MAX_TXN_ARG;
 
+void
+initTransactionHandles(Transaction &transaction)
+{
+  utils::internal::initTransactionCachedRequest(transaction);
+  utils::internal::initTransactionCachedResponse(transaction);
+  utils::internal::initTransactionServerRequest(transaction);
+  utils::internal::initTransactionServerResponse(transaction);
+  utils::internal::initTransactionClientResponse(transaction);
+
+  return;
+}
+
 int
 handleTransactionEvents(TSCont cont, TSEvent event, void *edata)
 {
@@ -61,19 +73,14 @@ handleTransactionEvents(TSCont cont, TSEvent event, void *edata)
     (void)TSHttpTxnClientReqGet(static_cast<TSHttpTxn>(transaction.getAtsHandle()), &hdr_buf, &hdr_loc);
     break;
   case TS_EVENT_HTTP_SEND_REQUEST_HDR:
-    utils::internal::initTransactionServerRequest(transaction);
-    break;
   case TS_EVENT_HTTP_READ_RESPONSE_HDR:
-    utils::internal::initTransactionServerResponse(transaction);
-    break;
   case TS_EVENT_HTTP_SEND_RESPONSE_HDR:
-    utils::internal::initTransactionClientResponse(transaction);
-    break;
   case TS_EVENT_HTTP_READ_CACHE_HDR:
-    utils::internal::initTransactionCachedRequest(transaction);
-    utils::internal::initTransactionCachedResponse(transaction);
+    // the buffer handles may be destroyed in the core during redirect follow
+    initTransactionHandles(transaction);
     break;
   case TS_EVENT_HTTP_TXN_CLOSE: { // opening scope to declare plugins variable below
+    initTransactionHandles(transaction);
     const std::list<TransactionPlugin *> &plugins = utils::internal::getTransactionPlugins(transaction);
     for (std::list<TransactionPlugin *>::const_iterator iter = plugins.begin(), end = plugins.end(); iter != end; ++iter) {
       shared_ptr<Mutex> trans_mutex = utils::internal::getTransactionPluginMutex(**iter);