diff --git a/include/record_manager.hpp b/include/record_manager.hpp index ec7c414..8ad8ee6 100644 --- a/include/record_manager.hpp +++ b/include/record_manager.hpp @@ -57,6 +57,7 @@ class RecordManager // === 文件列表索引 === std::unordered_map> index_; + std::mutex index_mutex_; // 解析文件名得到 start_ms 和 end_ms RecordFileInfo parseFile(const std::filesystem::path& p); diff --git a/src/record_manager.cpp b/src/record_manager.cpp index 8ae8eda..ffbbb32 100644 --- a/src/record_manager.cpp +++ b/src/record_manager.cpp @@ -164,6 +164,8 @@ void RecordManager::stopAutoScan() // void RecordManager::scanAll() { + std::lock_guard lock(index_mutex_); + index_.clear(); if (!fs::exists(record_dir_)) @@ -261,6 +263,8 @@ RecordFileInfo RecordManager::parseFile(const fs::path& p) // std::vector RecordManager::querySegments(const std::string& stream, int64_t start_ms, int64_t end_ms) { + std::lock_guard lock(index_mutex_); + std::vector result; if (start_ms <= 0 || end_ms <= 0 || start_ms >= end_ms) return result; if (!index_.count(stream)) return result; @@ -322,6 +326,8 @@ std::vector RecordManager::querySegments(const std::string& strea // RecordSegment RecordManager::getSegment(const std::string& segmentId) { + std::lock_guard lock(index_mutex_); + // 1) 找最后一个 "_" size_t pos_last = segmentId.rfind('_'); if (pos_last == std::string::npos) return {};