Merge "libsnapshot: Reinitiaze SnapshotMergeStats instance" into main
diff --git a/fs_mgr/libsnapshot/include/libsnapshot/snapshot_stats.h b/fs_mgr/libsnapshot/include/libsnapshot/snapshot_stats.h
index 8a70400..79443b2 100644
--- a/fs_mgr/libsnapshot/include/libsnapshot/snapshot_stats.h
+++ b/fs_mgr/libsnapshot/include/libsnapshot/snapshot_stats.h
@@ -64,6 +64,7 @@
public:
// Not thread safe.
static SnapshotMergeStats* GetInstance(SnapshotManager& manager);
+ SnapshotMergeStats(const std::string& path);
// ISnapshotMergeStats overrides
bool Start() override;
@@ -88,7 +89,6 @@
private:
bool ReadState();
bool DeleteState();
- SnapshotMergeStats(const std::string& path);
std::string path_;
SnapshotMergeReport report_;
diff --git a/fs_mgr/libsnapshot/snapshot_stats.cpp b/fs_mgr/libsnapshot/snapshot_stats.cpp
index 8e9d9c5..e684d87 100644
--- a/fs_mgr/libsnapshot/snapshot_stats.cpp
+++ b/fs_mgr/libsnapshot/snapshot_stats.cpp
@@ -24,9 +24,12 @@
namespace snapshot {
SnapshotMergeStats* SnapshotMergeStats::GetInstance(SnapshotManager& parent) {
- static SnapshotMergeStats g_instance(parent.GetMergeStateFilePath());
- CHECK_EQ(g_instance.path_, parent.GetMergeStateFilePath());
- return &g_instance;
+ static std::unique_ptr<SnapshotMergeStats> g_instance;
+
+ if (!g_instance || g_instance->path_ != parent.GetMergeStateFilePath()) {
+ g_instance = std::make_unique<SnapshotMergeStats>(parent.GetMergeStateFilePath());
+ }
+ return g_instance.get();
}
SnapshotMergeStats::SnapshotMergeStats(const std::string& path) : path_(path), running_(false) {}