]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3351] fixed memory leaks
authorRazvan Becheriu <razvan@isc.org>
Wed, 16 Oct 2024 11:17:55 +0000 (14:17 +0300)
committerRazvan Becheriu <razvan@isc.org>
Wed, 16 Oct 2024 11:17:55 +0000 (14:17 +0300)
src/lib/asiolink/process_spawn.cc
src/lib/asiolink/tests/io_service_signal_unittests.cc
src/lib/asiolink/tests/process_spawn_unittest.cc
src/lib/cc/tests/data_unittests.cc

index 98964eb7f4ed497e850d3f96ffb5e3f3d872acc7..1d91075cef065c580457d0c9cc3ff0f1437616ad 100644 (file)
@@ -154,7 +154,7 @@ private:
         /// @brief Constructor
         ///
         /// @param io_service The IOService which handles signal handlers.
-        IOSignalSetInitializer(IOServicePtr io_service) {
+        IOSignalSetInitializer(IOServicePtr io_service) : io_service_(io_service) {
             if (!io_service) {
                 isc_throw(ProcessSpawnError, "NULL IOService instance");
             }
@@ -168,6 +168,8 @@ private:
         /// @brief Destructor
         ~IOSignalSetInitializer() {
             io_signal_set_->remove(SIGCHLD);
+            io_signal_set_.reset();
+            io_service_->stopAndPoll();
         }
 
     public:
@@ -181,6 +183,9 @@ private:
 
     private:
 
+        /// @brief IOService instance to process IO.
+        asiolink::IOServicePtr io_service_;
+
         /// @brief ASIO signal set.
         IOSignalSetPtr io_signal_set_;
     };
index 894df1556a15b9335a2af4748b1fa1e9f2998060..efcc58f2254cd8c3c1d83677a414ddf80902710b 100644 (file)
@@ -61,12 +61,11 @@ public:
 
     /// @brief Destructor.
     ~IOSignalTest() {
+        test_timer_.cancel();
+        io_service_->stopAndPoll();
         io_signal_set_.reset();
         // Make sure the cancel handler for the IOSignalSet is called.
-        if (io_service_->stopped()) {
-            io_service_->restart();
-        }
-        io_service_->poll();
+        io_service_->stopAndPoll();
     }
 
     /// @brief Method used as the IOSignalSet handler.
index 71fdebb695e0fe7262f58cf153e94bbbb409f3c0..6ea7e696278e23f31ffcadd01f057359257ea9a7 100644 (file)
@@ -56,7 +56,7 @@ public:
     ProcessSpawnTest() :
         io_service_(getIOService()), test_timer_(io_service_),
         test_time_ms_(0), io_signal_set_(), processed_signals_() {
-        ProcessSpawn::setIOService(getIOService());
+        ProcessSpawn::setIOService(io_service_);
 
         io_signal_set_.reset(new IOSignalSet(io_service_,
                                              std::bind(&ProcessSpawnTest::processSignal,
@@ -66,8 +66,11 @@ public:
 
     /// @brief Destructor.
     ~ProcessSpawnTest() {
+        test_timer_.cancel();
+        io_service_->stopAndPoll();
         io_signal_set_->remove(SIGCHLD);
         io_signal_set_.reset();
+        ProcessSpawn::setIOService(IOServicePtr());
         // Make sure the cancel handler for the IOSignalSet is called.
         io_service_->stopAndPoll();
     }
index 6955ccba4a7940ac2eb0c9b2164875c4cef164fd..2d69dc52ccf9913154d4a4817cd78b1700d87c3a 100644 (file)
@@ -1193,6 +1193,7 @@ TEST(Element, isEquivalent) {
         ElementPtr l = Element::createList();
         l->add(l);
         EXPECT_THROW(isEquivalent(l, l), isc::BadValue);
+        l->remove(0);
     }
 }