Skip to content

Commit 53237ad

Browse files
authored
Fixed dtor for threads.
1 parent cb7fb52 commit 53237ad

File tree

10 files changed

+35
-19
lines changed

10 files changed

+35
-19
lines changed

src/data/thread_disk.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ ThreadDisk::create_thread() {
2323
m_thread_disk = new ThreadDisk;
2424
}
2525

26+
void
27+
ThreadDisk::destroy_thread() {
28+
delete m_thread_disk;
29+
m_thread_disk = nullptr;
30+
}
31+
2632
ThreadDisk*
2733
ThreadDisk::thread_disk() {
2834
return m_thread_disk;
@@ -42,8 +48,6 @@ ThreadDisk::init_thread() {
4248

4349
void
4450
ThreadDisk::cleanup_thread() {
45-
m_thread_disk = nullptr;
46-
4751
assert(m_hash_check_queue.empty() && "ThreadDisk::cleanup_thread(): m_hash_check_queue not empty.");
4852
}
4953

src/data/thread_disk.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class LIBTORRENT_EXPORT ThreadDisk : public utils::Thread {
1212
~ThreadDisk() override;
1313

1414
static void create_thread();
15+
static void destroy_thread();
1516
static ThreadDisk* thread_disk();
1617

1718
const char* name() const override { return "rtorrent disk"; }

src/net/thread_net.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ ThreadNet::create_thread() {
4242
m_thread_net = thread;
4343
}
4444

45+
void
46+
ThreadNet::destroy_thread() {
47+
delete m_thread_net;
48+
m_thread_net = nullptr;
49+
}
50+
4551
ThreadNet*
4652
ThreadNet::thread_net() {
4753
return m_thread_net;
@@ -61,8 +67,6 @@ ThreadNet::init_thread_post_local() {
6167

6268
void
6369
ThreadNet::cleanup_thread() {
64-
m_thread_net = nullptr;
65-
6670
m_http_stack->shutdown();
6771
m_udns->cleanup();
6872
}

src/net/thread_net.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class LIBTORRENT_EXPORT ThreadNet : public utils::Thread {
1717
~ThreadNet() override;
1818

1919
static void create_thread();
20+
static void destroy_thread();
2021
static ThreadNet* thread_net();
2122

2223
const char* name() const override { return "rtorrent net"; }

src/net/udns_resolver.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,14 @@ UdnsResolver::resolve(void* requester, const std::string& hostname, int family,
141141
if (query->a6_query == nullptr) {
142142
LT_LOG("malformed AAAA query : requester:%p name:%s", requester, hostname.c_str());
143143

144-
if (::dns_status(m_ctx) != DNS_E_BADQUERY)
145-
throw new internal_error("dns_submit_a6 failed");
146-
147144
if (query->a4_query != nullptr) {
148145
::dns_cancel(m_ctx, query->a4_query);
149146
query->a4_query = nullptr;
150147
}
151148

149+
if (::dns_status(m_ctx) != DNS_E_BADQUERY)
150+
throw new internal_error("dns_submit_a6 failed");
151+
152152
query->error_sin = EAI_NONAME;
153153

154154
process_timeouts();
@@ -352,9 +352,11 @@ UdnsResolver::a4_callback_wrapper(struct ::dns_ctx *ctx, ::dns_rr_a4 *result, vo
352352
}
353353

354354
auto itr = query->parent->find_query(static_cast<UdnsResolver::Query*>(data));
355+
355356
if (itr == query->parent->m_queries.end())
356357
throw internal_error("UdnsResolver::a4_callback_wrapper called with invalid query");
357358

359+
// TODO: Verify...
358360
query->a4_query = nullptr;
359361

360362
if (result == nullptr || result->dnsa4_nrr == 0) {

src/torrent/torrent.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,9 @@ cleanup() {
148148
thread_disk()->stop_thread_wait();
149149
net_thread::thread()->stop_thread_wait();
150150

151-
// TODO: Set these to null.
152-
delete thread_tracker();
153-
delete thread_disk();
154-
delete net_thread::thread();
151+
ThreadTracker::destroy_thread();
152+
ThreadDisk::destroy_thread();
153+
ThreadNet::destroy_thread();
155154

156155
delete manager;
157156
manager = NULL;

src/torrent/utils/thread.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ Thread::start_thread() {
4747
if (!is_initialized())
4848
throw internal_error("Called Thread::start_thread on an uninitialized object.");
4949

50-
if (pthread_create(&m_thread, NULL, &Thread::enter_event_loop, this))
50+
if (pthread_create(&m_thread, nullptr, &Thread::enter_event_loop, this))
5151
throw internal_error("Failed to create thread.");
5252

5353
while (m_state != STATE_ACTIVE)
@@ -60,7 +60,7 @@ Thread::stop_thread_wait() {
6060
m_flags |= flag_do_shutdown;
6161
interrupt();
6262

63-
pthread_join(m_thread, NULL);
63+
pthread_join(m_thread, nullptr);
6464
assert(is_inactive());
6565
}
6666

src/tracker/thread_tracker.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ ThreadTracker::create_thread(utils::Thread* main_thread) {
2222
m_thread_tracker.load()->m_tracker_manager = std::make_unique<tracker::Manager>(main_thread, m_thread_tracker);
2323
}
2424

25+
void
26+
ThreadTracker::destroy_thread() {
27+
delete m_thread_tracker;
28+
m_thread_tracker = nullptr;
29+
}
30+
2531
ThreadTracker*
2632
ThreadTracker::thread_tracker() {
2733
return m_thread_tracker;
@@ -40,8 +46,6 @@ ThreadTracker::init_thread() {
4046

4147
void
4248
ThreadTracker::cleanup_thread() {
43-
m_thread_tracker = nullptr;
44-
4549
m_tracker_manager.reset();
4650
}
4751

src/tracker/thread_tracker.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class LIBTORRENT_EXPORT ThreadTracker : public utils::Thread {
2323
~ThreadTracker() override;
2424

2525
static void create_thread(utils::Thread* main_thread);
26+
static void destroy_thread();
2627
static ThreadTracker* thread_tracker();
2728

2829
const char* name() const override { return "rtorrent tracker"; }

test/helpers/test_main_thread.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ TestFixtureWithMainAndDiskThread::setUp() {
8383
void
8484
TestFixtureWithMainAndDiskThread::tearDown() {
8585
torrent::thread_disk()->stop_thread_wait();
86-
delete torrent::thread_disk();
86+
torrent::ThreadDisk::destroy_thread();
8787

8888
m_main_thread.reset();
8989

@@ -108,7 +108,7 @@ TestFixtureWithMainAndTrackerThread::setUp() {
108108
void
109109
TestFixtureWithMainAndTrackerThread::tearDown() {
110110
torrent::thread_tracker()->stop_thread_wait();
111-
delete torrent::thread_tracker();
111+
torrent::ThreadTracker::destroy_thread();
112112

113113
m_main_thread.reset();
114114

@@ -140,8 +140,8 @@ TestFixtureWithMainNetTrackerThread::tearDown() {
140140
torrent::thread_tracker()->stop_thread_wait();
141141
torrent::net_thread::thread()->stop_thread_wait();
142142

143-
delete torrent::net_thread::thread();
144-
delete torrent::thread_tracker();
143+
torrent::ThreadTracker::destroy_thread();
144+
torrent::ThreadNet::destroy_thread();
145145

146146
m_main_thread.reset();
147147

0 commit comments

Comments
 (0)