util: plug Regex memory leak
Previously, RegexMatcher::m_backrefManager and RegexBackrefManager::m_backrefs
own each other via shared_ptrs, causing a memory leak.
RegexBackrefManager::m_backrefs is now changed to weak_ptr.
refs #3673
Change-Id: I882a83ee1f29754721d9b3b9997b3bbc465df989
diff --git a/tests/unit-tests/util/regex.t.cpp b/tests/unit-tests/util/regex.t.cpp
index fc46c23..ea27473 100644
--- a/tests/unit-tests/util/regex.t.cpp
+++ b/tests/unit-tests/util/regex.t.cpp
@@ -439,6 +439,23 @@
BOOST_CHECK_EQUAL(cm->expand(), Name("/ndn/edu/ucla/yingdi/mac/"));
}
+BOOST_AUTO_TEST_CASE(RegexBackrefManagerMemoryLeak)
+{
+ auto re = make_unique<Regex>("^(<>)$");
+
+ weak_ptr<RegexPatternListMatcher> m1(re->m_primaryMatcher);
+ weak_ptr<RegexPatternListMatcher> m2(re->m_secondaryMatcher);
+ weak_ptr<RegexBackrefManager> b1(re->m_primaryBackrefManager);
+ weak_ptr<RegexBackrefManager> b2(re->m_secondaryBackrefManager);
+
+ re.reset();
+
+ BOOST_CHECK_EQUAL(m1.use_count(), 0);
+ BOOST_CHECK_EQUAL(m2.use_count(), 0);
+ BOOST_CHECK_EQUAL(b1.use_count(), 0);
+ BOOST_CHECK_EQUAL(b2.use_count(), 0);
+}
+
BOOST_AUTO_TEST_SUITE_END() // TestRegex
BOOST_AUTO_TEST_SUITE_END() // Util