libtorrent icon indicating copy to clipboard operation
libtorrent copied to clipboard

Address Sanitizer issues with tests

Open neheb opened this issue 6 months ago • 15 comments

16:==9646==ERROR: AddressSanitizer: new-delete-type-mismatch on 0x7c086efe6e80 in thread T0:
78:SUMMARY: AddressSanitizer: new-delete-type-mismatch ../test/net/test_socket_listen.cc:78 in test_socket_listen::test_basic()
186:SUMMARY: AddressSanitizer: 98640 byte(s) leaked in 24 allocation(s).
210:==9642==ERROR: AddressSanitizer: new-delete-type-mismatch on 0x7b82e05ebd70 in thread T0:
272:SUMMARY: AddressSanitizer: new-delete-type-mismatch ../test/torrent/net/test_socket_address.cc:33 in test_socket_address::test_sa_is_any()
380:SUMMARY: AddressSanitizer: 1874072 byte(s) leaked in 1445 allocation(s).
486:SUMMARY: AddressSanitizer: 432072 byte(s) leaked in 106 allocation(s).
592:SUMMARY: AddressSanitizer: 384936 byte(s) leaked in 4124 allocation(s).

most of these issues are to do with new-delete mismatch with sockaddr structs and the Poll class leaking memory:

50:    #1 0x7fd87139bb08 in torrent::sa_copy_in6(sockaddr_in6 const*) ../src/torrent/net/socket_address.cc:219
51:    #2 0x7fd87139b8c5 in torrent::sa_copy(sockaddr const*) ../src/torrent/net/socket_address.cc:202
52:    #3 0x0000006b6333 in torrent::ai_get_first_sa(char const*, char const*, addrinfo const*) ../src/torrent/net/address_info.cc:26
93:    #2 0x7f97a7d37500 in torrent::Poll::create(int) ../src/torrent/poll_epoll.cc:111
125:    #2 0x7f97a7d37500 in torrent::Poll::create(int) ../src/torrent/poll_epoll.cc:111
157:    #2 0x7f97a7d37500 in torrent::Poll::create(int) ../src/torrent/poll_epoll.cc:111
244:    #1 0x7f52e299bb08 in torrent::sa_copy_in6(sockaddr_in6 const*) ../src/torrent/net/socket_address.cc:219
245:    #2 0x7f52e299b8c5 in torrent::sa_copy(sockaddr const*) ../src/torrent/net/socket_address.cc:202
246:    #3 0x0000005f822d in torrent::ai_get_first_sa(char const*, char const*, addrinfo const*) ../src/torrent/net/address_info.cc:26
399:    #2 0x7ff32f937500 in torrent::Poll::create(int) ../src/torrent/poll_epoll.cc:111
429:    #2 0x7ff32f937500 in torrent::Poll::create(int) ../src/torrent/poll_epoll.cc:111
459:    #2 0x7ff32f937500 in torrent::Poll::create(int) ../src/torrent/poll_epoll.cc:111
505:    #2 0x7f5ef9d37500 in torrent::Poll::create(int) ../src/torrent/poll_epoll.cc:111
512:    #9 0x7f5ef9e3ec7b in torrent::ThreadDisk::init_thread() ../src/data/thread_disk.cc:47
537:    #2 0x7f5ef9d37500 in torrent::Poll::create(int) ../src/torrent/poll_epoll.cc:111
567:    #2 0x0000005d3763 in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:49

the hashchunk one I believe has to do with its raw pointer usage and delete not being called.

neheb avatar May 14 '25 18:05 neheb

kqueue vs epoll doesn't make a difference:

../src/torrent/poll_kqueue.cc:113

neheb avatar May 14 '25 18:05 neheb

ugh looks like the sha1 modernization introduced a memory leak:

    #4 0x000000537947 in torrent::Sha1::init() ../src/utils/sha1.h:69

edit: ah no that's the hash queue thing.

neheb avatar May 16 '25 23:05 neheb

diff --git a/src/utils/sha1.h b/src/utils/sha1.h
index b0c37555..c2093565 100644
--- a/src/utils/sha1.h
+++ b/src/utils/sha1.h
@@ -44,6 +44,13 @@
 
 namespace torrent {
 
+struct sha1_deleter {
+  void operator()(EVP_MD_CTX* ctx) {
+    if (ctx != nullptr)
+      EVP_MD_CTX_free(ctx);
+  }
+};
+
 class Sha1 {
 public:
   Sha1();
@@ -55,11 +62,11 @@ public:
   void final_c(void* buffer);
 
 private:
-  std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)> m_ctx;
+  std::unique_ptr<EVP_MD_CTX, sha1_deleter> m_ctx;
 };
 
 inline Sha1::Sha1() :
-    m_ctx(EVP_MD_CTX_new(), EVP_MD_CTX_free) {
+    m_ctx(EVP_MD_CTX_new()) {
 }
 
 inline Sha1::~Sha1() = default;

Try this.

rakshasa avatar May 22 '25 08:05 rakshasa

https://github.com/rakshasa/libtorrent/pull/437

rakshasa avatar May 22 '25 08:05 rakshasa

Nope. The output is much worse now.

rg /src/ err.txt | grep -v poll_ | grep -v /src/tracker/thread_tracker.cc:52 | grep -v /src/data/thread_disk.cc | sort
    #2 0x0000005cf24f in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:49
    #2 0x0000005cf24f in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:49
    #2 0x0000005cf24f in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:49
    #3 0x00000053dfae in torrent::Sha1::Sha1() ../src/utils/sha1.h:72
    #3 0x00000053dfae in torrent::Sha1::Sha1() ../src/utils/sha1.h:72
    #3 0x00000053dfae in torrent::Sha1::Sha1() ../src/utils/sha1.h:72
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f2d0e92be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7f4bd772be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7fbff8d2be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #3 0x7fbff8d2be19 in torrent::internal_error::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.cc:43
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd342 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd352 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x0000004cd352 in torrent::internal_error::internal_error(char const*) ../src/torrent/exceptions.h:28
    #4 0x00000053e037 in torrent::Sha1::init() ../src/utils/sha1.h:77
    #4 0x00000053e037 in torrent::Sha1::init() ../src/utils/sha1.h:77
    #4 0x00000053e037 in torrent::Sha1::init() ../src/utils/sha1.h:77
    #4 0x0000006bd2e0 in torrent::internal_error::internal_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.h:33
    #4 0x0000006bd2e0 in torrent::internal_error::internal_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.h:33
    #4 0x0000006bd2e0 in torrent::internal_error::internal_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.h:33
    #4 0x0000006bd2e0 in torrent::internal_error::internal_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.h:33
    #4 0x0000006bd2e0 in torrent::internal_error::internal_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.h:33
    #4 0x0000006bd2e0 in torrent::internal_error::internal_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/exceptions.h:33
    #5 0x0000005cf24f in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:49
    #5 0x0000005cf24f in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:49
    #5 0x0000005cf24f in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:49
    #5 0x0000005cf6cf in torrent::HashChunk::set_chunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:57
    #5 0x0000005cf6cf in torrent::HashChunk::set_chunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:57
    #5 0x0000005cf6cf in torrent::HashChunk::set_chunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:57
    #5 0x0000006ba50c in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:28
    #5 0x0000006ba75e in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:31
    #5 0x0000006ba75e in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:31
    #5 0x0000006ba75e in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:31
    #5 0x0000006ba75e in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:31
    #5 0x0000006ba75e in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:31
    #5 0x0000006ba75e in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:31
    #5 0x0000006ba83e in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:34
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x0000006ba8cc in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:38
    #5 0x7f2d0e797f8f in torrent::fd_open(torrent::fd_flags) ../src/torrent/net/fd.cc:63
    #5 0x7f2d0e797f8f in torrent::fd_open(torrent::fd_flags) ../src/torrent/net/fd.cc:63
    #5 0x7f2d0e7be178 in torrent::sa_make_unix(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ../src/torrent/net/socket_address.cc:162
    #5 0x7f4bd75be56d in torrent::sa_copy(sockaddr const*) ../src/torrent/net/socket_address.cc:196
    #5 0x7f4bd75be56d in torrent::sa_copy(sockaddr const*) ../src/torrent/net/socket_address.cc:196
    #5 0x7f4bd75be97c in torrent::sa_copy_addr(sockaddr const*, unsigned short) ../src/torrent/net/socket_address.cc:227
    #5 0x7f4bd75be97c in torrent::sa_copy_addr(sockaddr const*, unsigned short) ../src/torrent/net/socket_address.cc:227
    #5 0x7f4bd75be97c in torrent::sa_copy_addr(sockaddr const*, unsigned short) ../src/torrent/net/socket_address.cc:227
    #5 0x7f4bd75be97c in torrent::sa_copy_addr(sockaddr const*, unsigned short) ../src/torrent/net/socket_address.cc:227
    #5 0x7f4bd75bf7d2 in torrent::sa_from_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:319
    #5 0x7f4bd75bf7d2 in torrent::sa_from_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:319
    #5 0x7f4bd75bf7d2 in torrent::sa_from_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:319
    #5 0x7f4bd75bf7d2 in torrent::sa_from_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:319
    #5 0x7f4bd75bf7d2 in torrent::sa_from_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:319
    #5 0x7f4bd75bf7d2 in torrent::sa_from_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:319
    #5 0x7f4bd75bf989 in torrent::sa_to_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:327
    #5 0x7f4bd75bf989 in torrent::sa_to_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:327
    #5 0x7f4bd75bf989 in torrent::sa_to_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:327
    #5 0x7f4bd75bf989 in torrent::sa_to_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:327
    #5 0x7f4bd75bf989 in torrent::sa_to_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:327
    #5 0x7f4bd75bf989 in torrent::sa_to_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:327
    #5 0x7f4bd75bf989 in torrent::sa_to_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:327
    #5 0x7f4bd75bf989 in torrent::sa_to_v4mapped(sockaddr const*) ../src/torrent/net/socket_address.cc:327
    #5 0x7f4bd75c0223 in torrent::sin_from_sa(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&) ../src/torrent/net/socket_address.cc:357
    #5 0x7f4bd75c0223 in torrent::sin_from_sa(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&) ../src/torrent/net/socket_address.cc:357
    #5 0x7f4bd75c0223 in torrent::sin_from_sa(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&) ../src/torrent/net/socket_address.cc:357
    #5 0x7f4bd75c0321 in torrent::sin6_from_sa(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&) ../src/torrent/net/socket_address.cc:365
    #5 0x7f4bd75c0321 in torrent::sin6_from_sa(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&) ../src/torrent/net/socket_address.cc:365
    #5 0x7f4bd75c0321 in torrent::sin6_from_sa(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&) ../src/torrent/net/socket_address.cc:365
    #5 0x7f4bd75c0b0c in torrent::sa_equal(sockaddr const*, sockaddr const*) ../src/torrent/net/socket_address.cc:429
    #5 0x7f4bd75c0b0c in torrent::sa_equal(sockaddr const*, sockaddr const*) ../src/torrent/net/socket_address.cc:429
    #5 0x7f4bd75c0e6e in torrent::sa_equal(sockaddr const*, sockaddr const*) ../src/torrent/net/socket_address.cc:442
    #5 0x7f4bd75c1469 in torrent::sa_equal_addr(sockaddr const*, sockaddr const*) ../src/torrent/net/socket_address.cc:464
    #5 0x7f4bd75c1469 in torrent::sa_equal_addr(sockaddr const*, sockaddr const*) ../src/torrent/net/socket_address.cc:464
    #5 0x7f4bd75c17cb in torrent::sa_equal_addr(sockaddr const*, sockaddr const*) ../src/torrent/net/socket_address.cc:477
    #5 0x7fbff8cea19d in torrent::signal_bitfield::add_signal(std::function<void ()> const&) ../src/torrent/utils/signal_bitfield.cc:17
    #5 0x7fbff8cea218 in torrent::signal_bitfield::add_signal(std::function<void ()> const&) ../src/torrent/utils/signal_bitfield.cc:20
    #6 0x0000005cf375 in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:50
    #6 0x0000005cf375 in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:50
    #6 0x0000005cf375 in torrent::HashChunk::HashChunk(torrent::ChunkHandle) ../src/data/hash_chunk.cc:50
    #6 0x0000005f856f in torrent::sap_copy(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:137
    #6 0x0000005f85ee in torrent::sap_copy(std::unique_ptr<sockaddr const, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:138
    #6 0x0000005f867b in torrent::sap_copy_addr(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&, unsigned short) ../src/torrent/net/socket_address.h:139
    #6 0x0000005f867b in torrent::sap_copy_addr(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&, unsigned short) ../src/torrent/net/socket_address.h:139
    #6 0x0000005f870b in torrent::sap_copy_addr(std::unique_ptr<sockaddr const, torrent::sockaddr_deleter> const&, unsigned short) ../src/torrent/net/socket_address.h:140
    #6 0x0000005f870b in torrent::sap_copy_addr(std::unique_ptr<sockaddr const, torrent::sockaddr_deleter> const&, unsigned short) ../src/torrent/net/socket_address.h:140
    #6 0x0000005f878d in torrent::sap_from_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:151
    #6 0x0000005f878d in torrent::sap_from_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:151
    #6 0x0000005f878d in torrent::sap_from_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:151
    #6 0x0000005f878d in torrent::sap_from_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:151
    #6 0x0000005f878d in torrent::sap_from_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:151
    #6 0x0000005f878d in torrent::sap_from_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:151
    #6 0x0000005f880c in torrent::sap_to_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:153
    #6 0x0000005f880c in torrent::sap_to_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:153
    #6 0x0000005f880c in torrent::sap_to_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:153
    #6 0x0000005f880c in torrent::sap_to_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:153
    #6 0x0000005f880c in torrent::sap_to_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:153
    #6 0x0000005f880c in torrent::sap_to_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:153
    #6 0x0000005f880c in torrent::sap_to_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:153
    #6 0x0000005f880c in torrent::sap_to_v4mapped(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:153
    #6 0x0000005f8893 in torrent::sap_equal(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&, std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:164
    #6 0x0000005f8893 in torrent::sap_equal(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&, std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:164
    #6 0x0000005f8893 in torrent::sap_equal(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&, std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:164
    #6 0x0000005f8a9f in torrent::sap_equal_addr(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&, std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:177
    #6 0x0000005f8a9f in torrent::sap_equal_addr(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&, std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:177
    #6 0x0000005f8a9f in torrent::sap_equal_addr(std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&, std::unique_ptr<sockaddr, torrent::sockaddr_deleter> const&) ../src/torrent/net/socket_address.h:177
    #6 0x0000006ba8fa in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:40
    #6 0x0000006ba8fa in torrent::socket_listen::open(std::unique_ptr<sockaddr, torrent::sockaddr_deleter>&&, unsigned short, unsigned short, unsigned short, torrent::fd_flags) ../src/net/socket_listen.cc:40

neheb avatar May 22 '25 18:05 neheb

Hrm actually the new delete mismatch warnings are gone. Now it's just leaks

1031:SUMMARY: AddressSanitizer: 270720 byte(s) leaked in 30 allocation(s).
1862:SUMMARY: AddressSanitizer: 57693 byte(s) leaked in 25 allocation(s).
2923:SUMMARY: AddressSanitizer: 77249 byte(s) leaked in 32 allocation(s).
4267:SUMMARY: AddressSanitizer: 1177764 byte(s) leaked in 132 allocation(s).
6288:SUMMARY: AddressSanitizer: 663568 byte(s) leaked in 4134 allocation(s).

neheb avatar May 22 '25 18:05 neheb

when using epoll:

839:SUMMARY: AddressSanitizer: 98640 byte(s) leaked in 24 allocation(s).
1670:SUMMARY: AddressSanitizer: 57693 byte(s) leaked in 25 allocation(s).
2731:SUMMARY: AddressSanitizer: 77249 byte(s) leaked in 32 allocation(s).
3762:SUMMARY: AddressSanitizer: 432084 byte(s) leaked in 106 allocation(s).
37882:SUMMARY: AddressSanitizer: 2169992 byte(s) leaked in 1517 allocation(s).
39583:SUMMARY: AddressSanitizer: 376768 byte(s) leaked in 4124 allocation(s).

neheb avatar May 22 '25 19:05 neheb

current results with kqueue:

1031:SUMMARY: AddressSanitizer: 270720 byte(s) leaked in 30 allocation(s).
1218:SUMMARY: AddressSanitizer: 586560 byte(s) leaked in 65 allocation(s).
3314:SUMMARY: AddressSanitizer: 1759680 byte(s) leaked in 195 allocation(s).
5239:SUMMARY: AddressSanitizer: 655400 byte(s) leaked in 3113 allocation(s).

epoll:

839:SUMMARY: AddressSanitizer: 98640 byte(s) leaked in 24 allocation(s).
995:SUMMARY: AddressSanitizer: 213720 byte(s) leaked in 52 allocation(s).
2622:SUMMARY: AddressSanitizer: 641160 byte(s) leaked in 156 allocation(s).
36742:SUMMARY: AddressSanitizer: 2169992 byte(s) leaked in 1517 allocation(s).
38347:SUMMARY: AddressSanitizer: 368600 byte(s) leaked in 3103 allocation(s).

neheb avatar May 25 '25 21:05 neheb

turns to

32869:SUMMARY: AddressSanitizer: 98552 byte(s) leaked in 1013 allocation(s).
33184:SUMMARY: AddressSanitizer: 204200 byte(s) leaked in 3063 allocation(s).

after

--- a/src/torrent/utils/thread.cc
+++ b/src/torrent/utils/thread.cc
@@ -42,7 +42,7 @@ Thread::Thread() :
 
 Thread::~Thread() {
   // Disown m_poll instead of deleting it as we don't properly clean up all the sockets.
-  m_poll.release();
+  m_poll = nullptr;
 
   // TODO: Set m_self to nullptr.
 }

neheb avatar May 25 '25 22:05 neheb

There's a leak in Poll that I'm aware off, and will be fixed when I refactor the code.

rakshasa avatar May 26 '25 12:05 rakshasa

Merged poll fix.

rakshasa avatar May 27 '25 10:05 rakshasa

current status:

32869:SUMMARY: AddressSanitizer: 98552 byte(s) leaked in 1013 allocation(s).
33184:SUMMARY: AddressSanitizer: 204200 byte(s) leaked in 3063 allocation(s).

The only leak from src is the Sha1 leak. After, https://github.com/rakshasa/libtorrent/pull/439 , the only remaining memory leaks are only in the test directory.

neheb avatar May 27 '25 20:05 neheb

if we look at only the direct leaks:

    2 Direct leak of 120 byte(s) in 1 object(s) allocated from:
    1     #0 0x7f12956e7a1b in operator new(unsigned long) (/lib64/libasan.so.8+0xe7a1b) (BuildId: 7f1aa7e2e600e8c9d54ce6e3d36f3d31bfe7949a)
32964     #1 0x000000419cea in test_hash_check_queue::test_single() ../test/data/test_hash_check_queue.cc:78
   32 Direct leak of 2400 byte(s) in 20 object(s) allocated from:
   31     #0 0x7f12956e7a1b in operator new(unsigned long) (/lib64/libasan.so.8+0xe7a1b) (BuildId: 7f1aa7e2e600e8c9d54ce6e3d36f3d31bfe7949a)
   30     #1 0x00000041c32e in test_hash_check_queue::test_multiple() ../test/data/test_hash_check_queue.cc:108

usage of new here. probably missing delete.

  51 Direct leak of 120000 byte(s) in 1000 object(s) allocated from:
   50     #0 0x7f12956e7a1b in operator new(unsigned long) (/lib64/libasan.so.8+0xe7a1b) (BuildId: 7f1aa7e2e600e8c9d54ce6e3d36f3d31bfe7949a)
   49     #1 0x00000041e8cf in test_hash_check_queue::test_thread_interrupt() ../test/data/test_hash_check_queue.cc:177

That's quite a lot.

neheb avatar May 29 '25 20:05 neheb

Regarding ASAN, it's not just leaks - after last changes, destructors now call this_thread methods when torrent::thread_self() is null in dozens of places, resulting in null pointer dereferences.

jmakovicka avatar May 30 '25 06:05 jmakovicka

I'm working on a fix now for the thread cleanup.

rakshasa avatar May 30 '25 08:05 rakshasa