diff --git a/Jamfile b/Jamfile index 815d9e94f..4891e8a27 100644 --- a/Jamfile +++ b/Jamfile @@ -379,9 +379,6 @@ feature.compose address : -fsanitize=address -fsani # RTC (runtime check) is an msvc feature feature.compose rtc : /RTCc /RTCsu ; -feature file-leak-logging : off on : composite propagated ; -feature.compose on : TORRENT_DEBUG_FILE_LEAKS=1 ; - feature i2p : on off : composite propagated ; feature.compose on : TORRENT_USE_I2P=1 ; feature.compose off : TORRENT_USE_I2P=0 ; diff --git a/include/libtorrent/file.hpp b/include/libtorrent/file.hpp index 2612b8c5a..a0f92e99d 100644 --- a/include/libtorrent/file.hpp +++ b/include/libtorrent/file.hpp @@ -207,31 +207,7 @@ namespace libtorrent struct file; -#ifdef TORRENT_DEBUG_FILE_LEAKS - struct file_handle - { - file_handle(); - explicit file_handle(file* f); - file_handle(file_handle const& fh); - ~file_handle(); - file* operator->(); - file const* operator->() const; - file& operator*(); - file const& operator*() const; - file* get(); - file const* get() const; - explicit operator bool() const; - file_handle& reset(file* f = nullptr); - - char stack[2048]; - private: - std::shared_ptr m_file; - }; - - void TORRENT_EXTRA_EXPORT print_open_files(char const* event, char const* name); -#else using file_handle = std::shared_ptr; -#endif struct TORRENT_EXTRA_EXPORT file: boost::noncopyable { @@ -333,10 +309,6 @@ namespace libtorrent std::uint32_t file_id() const { return m_file_id; } #endif -#ifdef TORRENT_DEBUG_FILE_LEAKS - void print_info(FILE* out) const; -#endif - private: handle_type m_file_handle; @@ -348,10 +320,6 @@ namespace libtorrent #if defined TORRENT_WINDOWS static bool has_manage_volume_privs; #endif - -#ifdef TORRENT_DEBUG_FILE_LEAKS - std::string m_file_path; -#endif }; TORRENT_EXTRA_EXPORT int bufs_size(span bufs); diff --git a/src/file.cpp b/src/file.cpp index 809ffe055..c896b93e4 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -73,11 +73,6 @@ POSSIBILITY OF SUCH DAMAGE. #include "libtorrent/aux_/max_path.hpp" // for TORRENT_MAX_PATH #include -#ifdef TORRENT_DEBUG_FILE_LEAKS -#include -#include -#endif - // for convert_to_wstring and convert_to_native #include "libtorrent/aux_/escape_string.hpp" #include "libtorrent/assert.hpp" @@ -1361,10 +1356,6 @@ namespace libtorrent { close(); -#ifdef TORRENT_DEBUG_FILE_LEAKS - m_file_path = path; -#endif - #ifdef TORRENT_DISK_STATS m_file_id = silly_hash(path); #endif @@ -1543,14 +1534,6 @@ namespace libtorrent return true; } -#ifdef TORRENT_DEBUG_FILE_LEAKS - void file::print_info(FILE* out) const - { - if (!is_open()) return; - std::fprintf(out, "\n===> FILE: %s\n", m_file_path.c_str()); - } -#endif - bool file::is_open() const { return m_file_handle != INVALID_HANDLE_VALUE; @@ -2221,73 +2204,4 @@ typedef struct _FILE_ALLOCATED_RANGE_BUFFER { return start; #endif } - -#ifdef TORRENT_DEBUG_FILE_LEAKS - std::set global_file_handles; - std::mutex file_handle_mutex; - - file_handle::file_handle() - { - std::lock_guard l(file_handle_mutex); - global_file_handles.insert(this); - stack[0] = 0; - } - file_handle::file_handle(file* f): m_file(f) - { - std::lock_guard l(file_handle_mutex); - global_file_handles.insert(this); - if (f) print_backtrace(stack, sizeof(stack), 10); - else stack[0] = 0; - } - file_handle::file_handle(file_handle const& fh) - { - std::lock_guard l(file_handle_mutex); - global_file_handles.insert(this); - m_file = fh.m_file; - if (m_file) print_backtrace(stack, sizeof(stack), 10); - else stack[0] = 0; - } - file_handle::~file_handle() - { - std::lock_guard l(file_handle_mutex); - global_file_handles.erase(this); - stack[0] = 0; - } - file* file_handle::operator->() { return m_file.get(); } - file const* file_handle::operator->() const { return m_file.get(); } - file& file_handle::operator*() { return *m_file.get(); } - file const& file_handle::operator*() const { return *m_file.get(); } - file* file_handle::get() { return m_file.get(); } - file const* file_handle::get() const { return m_file.get(); } - file_handle::operator bool() const { return m_file.get(); } - file_handle& file_handle::reset(file* f) - { - std::lock_guard l(file_handle_mutex); - if (f) print_backtrace(stack, sizeof(stack), 10); - else stack[0] = 0; - l.unlock(); - m_file.reset(f); - return *this; - } - - void print_open_files(char const* event, char const* name) - { - FILE* out = std::fopen("open_files.log", "a+"); - std::lock_guard l(file_handle_mutex); - std::fprintf(out, "\n\nEVENT: %s TORRENT: %s\n\n", event, name); - for (std::set::iterator i = global_file_handles.begin() - , end(global_file_handles.end()); i != end; ++i) - { - TORRENT_ASSERT(*i != nullptr); - if (!*i) continue; - file_handle const& h = **i; - if (!h) continue; - - if (!h->is_open()) continue; - h->print_info(out); - std::fprintf(out, "\n%s\n\n", h.stack); - } - std::fclose(out); - } -#endif } diff --git a/src/storage.cpp b/src/storage.cpp index 0eb0f8a9b..604f2cef5 100644 --- a/src/storage.cpp +++ b/src/storage.cpp @@ -587,10 +587,6 @@ namespace libtorrent // close files that were opened in write mode m_pool.release(storage_index()); - -#if defined TORRENT_DEBUG_FILE_LEAKS - print_open_files("release files", m_files.name().c_str()); -#endif } bool default_storage::has_any_file(storage_error& ec) @@ -651,10 +647,6 @@ namespace libtorrent // valid. if (exists(old_name, ec.ec)) { -#if defined TORRENT_DEBUG_FILE_LEAKS - print_open_files("release files", m_files.name().c_str()); -#endif - std::string new_path; if (is_complete(new_filename)) new_path = new_filename; else new_path = combine_path(m_save_path, new_filename); @@ -712,10 +704,6 @@ namespace libtorrent // make sure we don't have the files open m_pool.release(storage_index()); - -#if defined TORRENT_DEBUG_FILE_LEAKS - print_open_files("release files", m_files.name().c_str()); -#endif } void default_storage::delete_one_file(std::string const& p, error_code& ec) @@ -741,9 +729,6 @@ namespace libtorrent // case if (!m_pool.assert_idle_files(storage_index())) { -#if defined TORRENT_DEBUG_FILE_LEAKS - print_open_files("delete-files idle assert failed", m_files.name().c_str()); -#endif TORRENT_ASSERT_FAIL(); } #endif @@ -756,10 +741,6 @@ namespace libtorrent // delete it if (m_part_file) m_part_file.reset(); -#if defined TORRENT_DEBUG_FILE_LEAKS - print_open_files("release files", m_files.name().c_str()); -#endif - if (options == session::delete_files) { #if TORRENT_USE_ASSERTS @@ -823,10 +804,6 @@ namespace libtorrent DFLOG(stderr, "[%p] delete_files result: %s\n", static_cast(this) , ec.ec.message().c_str()); - -#if defined TORRENT_DEBUG_FILE_LEAKS - print_open_files("delete-files done", m_files.name().c_str()); -#endif } bool default_storage::verify_resume_data(add_torrent_params const& rd @@ -994,10 +971,6 @@ namespace libtorrent m_pool.release(storage_index()); -#if defined TORRENT_DEBUG_FILE_LEAKS - print_open_files("release files", m_files.name().c_str()); -#endif - // indices of all files we ended up copying. These need to be deleted // later aux::vector copied_files(f.num_files(), false);