This is an automated email from the ASF dual-hosted git repository. cmcfarlen pushed a commit to branch 10.0.x in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit b498568c202463ce89047c03fb6a26061a20a1eb Author: Leif Hedstrom <[email protected]> AuthorDate: Fri May 3 16:28:10 2024 -0600 This assures that plugins in a Cript are destructed (#11314) (cherry picked from commit 9eb45b8a310e0c6e7cef3d8299d74345fca4c390) --- include/cripts/Epilogue.hpp | 2 ++ include/cripts/Plugins.hpp | 15 +++++++++++++-- plugins/experimental/rate_limit/sni_selector.h | 3 ++- plugins/experimental/rate_limit/txn_limiter.h | 3 +++ src/cripts/Instance.cc | 2 +- src/cripts/Plugins.cc | 9 +++++++++ 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/include/cripts/Epilogue.hpp b/include/cripts/Epilogue.hpp index d535a3666a..0a710a5b99 100644 --- a/include/cripts/Epilogue.hpp +++ b/include/cripts/Epilogue.hpp @@ -450,6 +450,8 @@ TSRemapDeleteInstance(void *ih) wrap_delete_instance(&context, true, CaseArg); } + inst->debug("Deleted an instance for Cript = {}", inst->plugin_debug_tag); + delete inst; } diff --git a/include/cripts/Plugins.hpp b/include/cripts/Plugins.hpp index 5cfe65c262..afde5c862b 100644 --- a/include/cripts/Plugins.hpp +++ b/include/cripts/Plugins.hpp @@ -31,15 +31,26 @@ class Remap using self_type = Remap; public: - Remap() = default; - Remap(Remap &&) = default; + Remap() = default; + + Remap(Remap &&other) + { + _plugin = other._plugin; + _valid = other._valid; + other._plugin = nullptr; + } + Remap(const Remap &) = delete; + ~Remap() { cleanup(); } + Remap &operator=(Remap &&) = default; Remap &operator=(const Remap &) = delete; void _runRemap(Cript::Context *context); + void cleanup(); + [[nodiscard]] bool valid() const { diff --git a/plugins/experimental/rate_limit/sni_selector.h b/plugins/experimental/rate_limit/sni_selector.h index 7015226ddf..d461da33a0 100644 --- a/plugins/experimental/rate_limit/sni_selector.h +++ b/plugins/experimental/rate_limit/sni_selector.h @@ -41,7 +41,7 @@ public: using IPReputations = std::vector<IpReputation::SieveLru *>; using Lists = std::vector<List::IP *>; - SniSelector() = default; + SniSelector() { Dbg(dbg_ctl, "Creating SNI selector"); } SniSelector(self_type &&) = delete; self_type &operator=(const self_type &) = delete; @@ -49,6 +49,7 @@ public: virtual ~SniSelector() { + Dbg(dbg_ctl, "Destroying SNI selector"); if (_queue_action) { TSActionCancel(_queue_action); } diff --git a/plugins/experimental/rate_limit/txn_limiter.h b/plugins/experimental/rate_limit/txn_limiter.h index 7e4bacda00..a583806605 100644 --- a/plugins/experimental/rate_limit/txn_limiter.h +++ b/plugins/experimental/rate_limit/txn_limiter.h @@ -26,8 +26,11 @@ class TxnRateLimiter : public RateLimiter<TSHttpTxn> { public: + TxnRateLimiter() { Dbg(dbg_ctl, "Creating txn rate limiter"); } + ~TxnRateLimiter() override { + Dbg(dbg_ctl, "Destroying txn rate limiter"); if (_action) { TSActionCancel(_action); } diff --git a/src/cripts/Instance.cc b/src/cripts/Instance.cc index e50ee77fa4..04c39ace14 100644 --- a/src/cripts/Instance.cc +++ b/src/cripts/Instance.cc @@ -64,7 +64,7 @@ Cript::Instance::addPlugin(const Cript::string &tag, const Cript::string &plugin auto p = Plugin::Remap::create(tag, plugin, from_url, to_url, options); if (p.valid()) { - plugins[tag] = std::move(p); + plugins.emplace(tag, std::move(p)); return true; } else { diff --git a/src/cripts/Plugins.cc b/src/cripts/Plugins.cc index d7abeb360f..6721966b2f 100644 --- a/src/cripts/Plugins.cc +++ b/src/cripts/Plugins.cc @@ -71,6 +71,15 @@ Plugin::Remap::create(const std::string &tag, const std::string &plugin, const C return inst; // RVO } +void +Plugin::Remap::cleanup() +{ + if (_plugin) { + _plugin->done(); + _plugin = nullptr; + } +} + void Plugin::Remap::_runRemap(Cript::Context *context) {
