Skip to content

Commit 924b256

Browse files
author
Razvan Becheriu
committed
[#3351] fixed memory leaks
1 parent 59278bd commit 924b256

File tree

4 files changed

+14
-6
lines changed

4 files changed

+14
-6
lines changed

src/lib/asiolink/process_spawn.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ class ProcessSpawnImpl : boost::noncopyable {
154154
/// @brief Constructor
155155
///
156156
/// @param io_service The IOService which handles signal handlers.
157-
IOSignalSetInitializer(IOServicePtr io_service) {
157+
IOSignalSetInitializer(IOServicePtr io_service) : io_service_(io_service) {
158158
if (!io_service) {
159159
isc_throw(ProcessSpawnError, "NULL IOService instance");
160160
}
@@ -168,6 +168,8 @@ class ProcessSpawnImpl : boost::noncopyable {
168168
/// @brief Destructor
169169
~IOSignalSetInitializer() {
170170
io_signal_set_->remove(SIGCHLD);
171+
io_signal_set_.reset();
172+
io_service_->stopAndPoll();
171173
}
172174

173175
public:
@@ -181,6 +183,9 @@ class ProcessSpawnImpl : boost::noncopyable {
181183

182184
private:
183185

186+
/// @brief IOService instance to process IO.
187+
asiolink::IOServicePtr io_service_;
188+
184189
/// @brief ASIO signal set.
185190
IOSignalSetPtr io_signal_set_;
186191
};

src/lib/asiolink/tests/io_service_signal_unittests.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,11 @@ class IOSignalTest : public ::testing::Test {
6161

6262
/// @brief Destructor.
6363
~IOSignalTest() {
64+
test_timer_.cancel();
65+
io_service_->stopAndPoll();
6466
io_signal_set_.reset();
6567
// Make sure the cancel handler for the IOSignalSet is called.
66-
if (io_service_->stopped()) {
67-
io_service_->restart();
68-
}
69-
io_service_->poll();
68+
io_service_->stopAndPoll();
7069
}
7170

7271
/// @brief Method used as the IOSignalSet handler.

src/lib/asiolink/tests/process_spawn_unittest.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class ProcessSpawnTest : public ::testing::Test {
5656
ProcessSpawnTest() :
5757
io_service_(getIOService()), test_timer_(io_service_),
5858
test_time_ms_(0), io_signal_set_(), processed_signals_() {
59-
ProcessSpawn::setIOService(getIOService());
59+
ProcessSpawn::setIOService(io_service_);
6060

6161
io_signal_set_.reset(new IOSignalSet(io_service_,
6262
std::bind(&ProcessSpawnTest::processSignal,
@@ -66,8 +66,11 @@ class ProcessSpawnTest : public ::testing::Test {
6666

6767
/// @brief Destructor.
6868
~ProcessSpawnTest() {
69+
test_timer_.cancel();
70+
io_service_->stopAndPoll();
6971
io_signal_set_->remove(SIGCHLD);
7072
io_signal_set_.reset();
73+
ProcessSpawn::setIOService(IOServicePtr());
7174
// Make sure the cancel handler for the IOSignalSet is called.
7275
io_service_->stopAndPoll();
7376
}

src/lib/cc/tests/data_unittests.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,6 +1193,7 @@ TEST(Element, isEquivalent) {
11931193
ElementPtr l = Element::createList();
11941194
l->add(l);
11951195
EXPECT_THROW(isEquivalent(l, l), isc::BadValue);
1196+
l->remove(0);
11961197
}
11971198
}
11981199

0 commit comments

Comments
 (0)