Repository: trafficserver
Updated Branches:
  refs/heads/ts-4160 5bfe22907 -> ffb465138 (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.

[TS-4160] move the reset of handles to NULL to the operator() from TS-4135.


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

Branch: refs/heads/ts-4160
Commit: ffb465138f5c10ca636ca69828aae17508bfe0f9
Parents: f8ce9e9
Author: Sudheer Vinukonda <[email protected]>
Authored: Fri Jan 29 01:00:10 2016 +0000
Committer: Sudheer Vinukonda <[email protected]>
Committed: Fri Jan 29 01:56:24 2016 +0000

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


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/ffb46513/lib/atscppapi/src/Transaction.cc
----------------------------------------------------------------------
diff --git a/lib/atscppapi/src/Transaction.cc b/lib/atscppapi/src/Transaction.cc
index b9396ef..60a3fd2 100644
--- a/lib/atscppapi/src/Transaction.cc
+++ b/lib/atscppapi/src/Transaction.cc
@@ -488,6 +488,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");

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/ffb46513/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);

Reply via email to