From 77a7d13b3954c7953a1df841bbf4c5398423df8a Mon Sep 17 00:00:00 2001 From: rakshasa Date: Tue, 1 Jan 2008 14:13:14 +0000 Subject: [PATCH] * Automatically prune the file status cache every day. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@1025 e378c898-3ddf-0310-93e7-cc216c733640 --- src/command_local.cc | 4 ++++ src/main.cc | 1 + src/utils/file_status_cache.cc | 13 +++++++++++++ src/utils/file_status_cache.h | 7 +++---- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/command_local.cc b/src/command_local.cc index 45bd0f7d..679dbb2f 100644 --- a/src/command_local.cc +++ b/src/command_local.cc @@ -51,6 +51,7 @@ #include "rpc/command_slot.h" #include "rpc/command_variable.h" #include "rpc/parse_commands.h" +#include "utils/file_status_cache.h" #include "globals.h" #include "control.h" @@ -127,6 +128,9 @@ initialize_command_local() { ADD_COMMAND_VOID("system.hostname", rak::ptr_fun(&system_hostname)); ADD_COMMAND_VOID("system.pid", rak::ptr_fun(&getpid)); + ADD_COMMAND_VOID("system.file_status_cache.size", rak::make_mem_fun((utils::FileStatusCache::base_type*)control->core()->file_status_cache(), &utils::FileStatusCache::size)); + ADD_COMMAND_VOID("system.file_status_cache.prune", rak::make_mem_fun(control->core()->file_status_cache(), &utils::FileStatusCache::prune)); + ADD_COMMAND_VALUE_SET_OCT("system.", "umask", std::ptr_fun(&umask)); ADD_COMMAND_STRING_PREFIX("system.", "cwd", std::ptr_fun(system_set_cwd), rak::ptr_fun(&system_get_cwd)); diff --git a/src/main.cc b/src/main.cc index 78079d93..db60207a 100644 --- a/src/main.cc +++ b/src/main.cc @@ -236,6 +236,7 @@ main(int argc, char** argv) { "schedule = session_save,1800,1800,session_save=\n" "schedule = low_diskspace,5,60,close_low_diskspace=500M\n" + "schedule = prune_file_status,3600,86400,system.file_status_cache.prune=\n" "encryption=allow_incoming,prefer_plaintext,enable_retry\n" ); diff --git a/src/utils/file_status_cache.cc b/src/utils/file_status_cache.cc index d8fd3009..92c550ac 100644 --- a/src/utils/file_status_cache.cc +++ b/src/utils/file_status_cache.cc @@ -68,4 +68,17 @@ FileStatusCache::insert(const std::string& path, int flags) { return true; } +void +FileStatusCache::prune() { + iterator itr = begin(); + + while (itr != end()) { + rak::file_stat fs; + iterator tmp = itr++; + + if (!fs.update(rak::path_expand(tmp->first)) || tmp->second.m_mtime != (uint32_t)fs.modified_time()) + base_type::erase(tmp); + } +} + } diff --git a/src/utils/file_status_cache.h b/src/utils/file_status_cache.h index b9ecf2ab..a2a33e8c 100644 --- a/src/utils/file_status_cache.h +++ b/src/utils/file_status_cache.h @@ -73,10 +73,9 @@ public: // Add a function for pruning a sorted list of paths. - // Function for removing entries in a container that shouldn't be - // there based on some parameters. - - // Function for pruning entries with different mtime or not existing. + // Function for pruning entries that no longer points to a file, or + // has a different mtime. + void prune(); }; }