From 84e3cbe775082ec9512106e5db467603bd8ef144 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Tue, 29 Apr 2025 13:37:34 -0500 Subject: [PATCH] cleanup encrypt provider expired readers --- .../providers/encrypt/encrypt_provider.hpp | 2 ++ .../providers/encrypt/encrypt_provider.cpp | 31 +++++++++++++++++++ support/include/utils/config.hpp | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/repertory/librepertory/include/providers/encrypt/encrypt_provider.hpp b/repertory/librepertory/include/providers/encrypt/encrypt_provider.hpp index 984f8500..d104aefb 100644 --- a/repertory/librepertory/include/providers/encrypt/encrypt_provider.hpp +++ b/repertory/librepertory/include/providers/encrypt/encrypt_provider.hpp @@ -84,6 +84,8 @@ private: void remove_deleted_files(stop_type &stop_requested); + void remove_expired_files(); + public: [[nodiscard]] auto check_version(std::string &required_version, std::string &returned_version) const diff --git a/repertory/librepertory/src/providers/encrypt/encrypt_provider.cpp b/repertory/librepertory/src/providers/encrypt/encrypt_provider.cpp index d7926b47..80f27dc5 100644 --- a/repertory/librepertory/src/providers/encrypt/encrypt_provider.cpp +++ b/repertory/librepertory/src/providers/encrypt/encrypt_provider.cpp @@ -40,6 +40,7 @@ #include "utils/file_utils.hpp" #include "utils/path.hpp" #include "utils/polling.hpp" +#include namespace repertory { encrypt_provider::encrypt_provider(app_config &config) @@ -881,6 +882,24 @@ void encrypt_provider::remove_deleted_files(stop_type &stop_requested) { get_stop_requested); } +void encrypt_provider::remove_expired_files() { + recur_mutex_lock reader_lookup_lock(reader_lookup_mtx_); + auto remove_list = std::accumulate( + reader_lookup_.begin(), reader_lookup_.end(), std::vector(), + [this](auto &&val, auto &&pair) -> auto { + const auto &[key, value] = pair; + auto diff = std::chrono::system_clock::now() - value->last_access_time; + if (std::chrono::duration_cast(diff) >= + std::chrono::seconds(config_.get_download_timeout_secs())) { + val.emplace_back(key); + } + return val; + }); + for (const auto &key : remove_list) { + reader_lookup_.erase(key); + } +} + auto encrypt_provider::start(api_item_added_callback /*api_item_added*/, i_file_manager * /*mgr*/) -> bool { REPERTORY_USES_FUNCTION_NAME(); @@ -927,6 +946,12 @@ auto encrypt_provider::start(api_item_added_callback /*api_item_added*/, [this](auto &&stop_requested) { remove_deleted_files(stop_requested); }, }); + polling::instance().set_callback({ + "remove_expired", + polling::frequency::high, + [this](auto && /* stop_requested */) { remove_expired_files(); }, + }); + event_system::instance().raise(function_name, "encrypt_provider"); return true; @@ -938,6 +963,12 @@ void encrypt_provider::stop() { event_system::instance().raise(function_name, "encrypt_provider"); polling::instance().remove_callback("check_deleted"); + polling::instance().remove_callback("remove_expired"); + + unique_recur_mutex_lock reader_lookup_lock(reader_lookup_mtx_); + reader_lookup_.clear(); + reader_lookup_lock.unlock(); + db_.reset(); event_system::instance().raise(function_name, "encrypt_provider"); diff --git a/support/include/utils/config.hpp b/support/include/utils/config.hpp index c7ef65f6..4173d1a3 100644 --- a/support/include/utils/config.hpp +++ b/support/include/utils/config.hpp @@ -106,7 +106,6 @@ #include #include #include -#include #include #include #include @@ -147,6 +146,7 @@ #include #include #include +#include #endif // defined(__cplusplus) #if defined(PROJECT_ENABLE_CURL)