removed file-leak code, temporarily used to trouble-shoot files appearing to be left open

This commit is contained in:
arvidn 2017-01-08 20:38:37 -05:00 committed by Arvid Norberg
parent 1cf3689578
commit 1d1ab4f4b5
4 changed files with 0 additions and 148 deletions

View File

@ -379,9 +379,6 @@ feature.compose <sanitize>address : <cflags>-fsanitize=address <linkflags>-fsani
# RTC (runtime check) is an msvc feature
feature.compose <sanitize>rtc : <cflags>/RTCc <cflags>/RTCsu ;
feature file-leak-logging : off on : composite propagated ;
feature.compose <file-leak-logging>on : <define>TORRENT_DEBUG_FILE_LEAKS=1 ;
feature i2p : on off : composite propagated ;
feature.compose <i2p>on : <define>TORRENT_USE_I2P=1 ;
feature.compose <i2p>off : <define>TORRENT_USE_I2P=0 ;

View File

@ -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<file> m_file;
};
void TORRENT_EXTRA_EXPORT print_open_files(char const* event, char const* name);
#else
using file_handle = std::shared_ptr<file>;
#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<file::iovec_t const> bufs);

View File

@ -73,11 +73,6 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/aux_/max_path.hpp" // for TORRENT_MAX_PATH
#include <cstring>
#ifdef TORRENT_DEBUG_FILE_LEAKS
#include <set>
#include <cstdio>
#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<file_handle*> global_file_handles;
std::mutex file_handle_mutex;
file_handle::file_handle()
{
std::lock_guard<std::mutex> l(file_handle_mutex);
global_file_handles.insert(this);
stack[0] = 0;
}
file_handle::file_handle(file* f): m_file(f)
{
std::lock_guard<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> l(file_handle_mutex);
std::fprintf(out, "\n\nEVENT: %s TORRENT: %s\n\n", event, name);
for (std::set<file_handle*>::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
}

View File

@ -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<void*>(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<bool, file_index_t> copied_files(f.num_files(), false);