From 94973bd9c6842cfac308fec0f325831a6dda639e Mon Sep 17 00:00:00 2001 From: Guillaume Bernos Date: Wed, 3 Apr 2024 13:42:54 +0200 Subject: [PATCH 1/2] fix(firestore, windows): improve memory managment --- .../windows/cloud_firestore_plugin.cpp | 11 ++++++++--- .../cloud_firestore/windows/cloud_firestore_plugin.h | 3 ++- .../cloud_firestore/windows/firestore_codec.cpp | 5 +++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp index 6b9eeb2dc69c..a53a73c340c8 100644 --- a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp +++ b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp @@ -135,7 +135,7 @@ std::map> cloud_firestore_windows::CloudFirestorePlugin::transactions_; -std::map +std::map> cloud_firestore_windows::CloudFirestorePlugin::firestoreInstances_; std::string RegisterEventChannelWithUUID( @@ -185,7 +185,7 @@ CloudFirestorePlugin::~CloudFirestorePlugin() {} Firestore* GetFirestoreFromPigeon(const FirestorePigeonFirebaseApp& pigeonApp) { if (CloudFirestorePlugin::firestoreInstances_.find(pigeonApp.app_name()) != CloudFirestorePlugin::firestoreInstances_.end()) { - return CloudFirestorePlugin::firestoreInstances_[pigeonApp.app_name()]; + return CloudFirestorePlugin::firestoreInstances_[pigeonApp.app_name()].get(); } App* app = App::GetInstance(pigeonApp.app_name().c_str()); @@ -222,7 +222,7 @@ Firestore* GetFirestoreFromPigeon(const FirestorePigeonFirebaseApp& pigeonApp) { firestore->set_settings(settings); - CloudFirestorePlugin::firestoreInstances_[pigeonApp.app_name()] = firestore; + CloudFirestorePlugin::firestoreInstances_[pigeonApp.app_name()] = std::unique_ptr(firestore); return firestore; } @@ -538,6 +538,7 @@ class LoadBundleStreamHandler std::unique_ptr>&& events) override { events_ = std::move(events); + events.reset(); firestore_->LoadBundle( bundle_, [this](const LoadBundleTaskProgress& progress) { flutter::EncodableMap map; @@ -755,6 +756,7 @@ class SnapshotInSyncStreamHandler std::unique_ptr>&& events) override { events_ = std::move(events); + events.reset(); // We do this to bind the event to the main channel auto boundSendEvent = std::bind(&SnapshotInSyncStreamHandler::SendEvent, this); @@ -830,6 +832,7 @@ class TransactionStreamHandler std::unique_ptr>&& events) override { events_ = std::move(events); + events.reset(); TransactionOptions options; options.set_max_attempts(maxAttempts_); @@ -1549,6 +1552,7 @@ class QuerySnapshotStreamHandler : MetadataChanges::kExclude; events_ = std::move(events); + events.reset(); listener_ = query_->AddSnapshotListener( metadataChanges, @@ -1654,6 +1658,7 @@ class DocumentSnapshotStreamHandler : MetadataChanges::kExclude; events_ = std::move(events); + events.reset(); listener_ = reference_->AddSnapshotListener( metadataChanges, diff --git a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.h b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.h index 72d9c15d8939..73e9e688787b 100644 --- a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.h +++ b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.h @@ -143,7 +143,8 @@ class CloudFirestorePlugin : public flutter::Plugin, static std::map> transactions_; - static std::map + static std::map < std::string, + std::unique_ptr> firestoreInstances_; }; diff --git a/packages/cloud_firestore/cloud_firestore/windows/firestore_codec.cpp b/packages/cloud_firestore/cloud_firestore/windows/firestore_codec.cpp index 5c1cf93131ed..573636581ae4 100644 --- a/packages/cloud_firestore/cloud_firestore/windows/firestore_codec.cpp +++ b/packages/cloud_firestore/cloud_firestore/windows/firestore_codec.cpp @@ -215,7 +215,7 @@ cloud_firestore_windows::FirestoreCodec::ReadValueOfType( if (CloudFirestorePlugin::firestoreInstances_.find(appName) != CloudFirestorePlugin::firestoreInstances_.end()) { return CustomEncodableValue( - CloudFirestorePlugin::firestoreInstances_[appName]); + CloudFirestorePlugin::firestoreInstances_[appName].get()); } firebase::App* app = firebase::App::GetInstance(appName.c_str()); @@ -223,7 +223,8 @@ cloud_firestore_windows::FirestoreCodec::ReadValueOfType( Firestore* firestore = Firestore::GetInstance(app); firestore->set_settings(settings); - CloudFirestorePlugin::firestoreInstances_[appName] = firestore; + CloudFirestorePlugin::firestoreInstances_[appName] = + std::unique_ptr(firestore); return CustomEncodableValue(firestore); } From 55381525699d715045e91601107bf4630bec09d5 Mon Sep 17 00:00:00 2001 From: Guillaume Bernos Date: Wed, 3 Apr 2024 13:46:24 +0200 Subject: [PATCH 2/2] format --- .../cloud_firestore/windows/cloud_firestore_plugin.cpp | 6 ++++-- .../cloud_firestore/windows/cloud_firestore_plugin.h | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp index a53a73c340c8..94bebf79f9fe 100644 --- a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp +++ b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp @@ -185,7 +185,8 @@ CloudFirestorePlugin::~CloudFirestorePlugin() {} Firestore* GetFirestoreFromPigeon(const FirestorePigeonFirebaseApp& pigeonApp) { if (CloudFirestorePlugin::firestoreInstances_.find(pigeonApp.app_name()) != CloudFirestorePlugin::firestoreInstances_.end()) { - return CloudFirestorePlugin::firestoreInstances_[pigeonApp.app_name()].get(); + return CloudFirestorePlugin::firestoreInstances_[pigeonApp.app_name()] + .get(); } App* app = App::GetInstance(pigeonApp.app_name().c_str()); @@ -222,7 +223,8 @@ Firestore* GetFirestoreFromPigeon(const FirestorePigeonFirebaseApp& pigeonApp) { firestore->set_settings(settings); - CloudFirestorePlugin::firestoreInstances_[pigeonApp.app_name()] = std::unique_ptr(firestore); + CloudFirestorePlugin::firestoreInstances_[pigeonApp.app_name()] = + std::unique_ptr(firestore); return firestore; } diff --git a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.h b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.h index 73e9e688787b..8627ee034d68 100644 --- a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.h +++ b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.h @@ -143,8 +143,7 @@ class CloudFirestorePlugin : public flutter::Plugin, static std::map> transactions_; - static std::map < std::string, - std::unique_ptr> + static std::map> firestoreInstances_; };