libtorrent
libtorrent copied to clipboard
Address Sanitizer issues with tests
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.
kqueue vs epoll doesn't make a difference:
../src/torrent/poll_kqueue.cc:113
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.
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.
https://github.com/rakshasa/libtorrent/pull/437
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
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).
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).
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).
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.
}
There's a leak in Poll that I'm aware off, and will be fixed when I refactor the code.
Merged poll fix.
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.
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.
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.
I'm working on a fix now for the thread cleanup.