diff --git a/repertory/librepertory/src/file_manager/file_manager.cpp b/repertory/librepertory/src/file_manager/file_manager.cpp index 49deec24..7a988da2 100644 --- a/repertory/librepertory/src/file_manager/file_manager.cpp +++ b/repertory/librepertory/src/file_manager/file_manager.cpp @@ -186,14 +186,17 @@ auto file_manager::evict_file(const std::string &api_path) -> bool { if (open_file_lookup_.contains(api_path)) { closeable_file = open_file_lookup_.at(api_path); } + open_file_lookup_.erase(api_path); - open_lock.unlock(); auto allocated = closeable_file ? closeable_file->get_allocated() : true; - closeable_file.reset(); auto removed = remove_source_and_shrink_cache(api_path, source_path, fsi.size, allocated); + open_lock.unlock(); + + closeable_file.reset(); + if (removed) { event_system::instance().raise(api_path, source_path); @@ -558,15 +561,13 @@ auto file_manager::remove_file(const std::string &api_path) -> api_error { upload_notify_.notify_all(); upload_lock.unlock(); - unique_recur_mutex_lock open_lock(open_file_mtx_); + recur_mutex_lock open_lock(open_file_mtx_); res = provider_.remove_file(api_path); if (res != api_error::success) { return res; } - open_lock.unlock(); - remove_source_and_shrink_cache(api_path, fsi.source_path, fsi.size, allocated); return api_error::success;