@@ -106,6 +106,10 @@ struct AOTDataDeleter {
106
106
};
107
107
108
108
using UniqueAotDataPtr = std::unique_ptr<_FlutterEngineAOTData, AOTDataDeleter>;
109
+ // / Maintains one ref on the FlutterDesktopMessenger's internal reference count.
110
+ using FlutterDesktopMessengerReferenceOwner =
111
+ std::unique_ptr<FlutterDesktopMessenger,
112
+ decltype (&FlutterDesktopMessengerRelease)>;
109
113
110
114
// Struct for storing state of a Flutter engine instance.
111
115
struct FlutterDesktopEngineState {
@@ -116,7 +120,8 @@ struct FlutterDesktopEngineState {
116
120
std::unique_ptr<flutter::EventLoop> event_loop;
117
121
118
122
// The plugin messenger handle given to API clients.
119
- std::shared_ptr<FlutterDesktopMessenger> messenger;
123
+ FlutterDesktopMessengerReferenceOwner messenger = {
124
+ nullptr , [](FlutterDesktopMessengerRef ref) {}};
120
125
121
126
// Message dispatch manager for messages from the Flutter engine.
122
127
std::unique_ptr<flutter::IncomingMessageDispatcher> message_dispatcher;
@@ -792,7 +797,7 @@ static void SetUpLocales(FlutterDesktopEngineState* state) {
792
797
static void SetUpCommonEngineState (FlutterDesktopEngineState* state,
793
798
GLFWwindow* window) {
794
799
// Messaging.
795
- state->messenger = std::shared_ptr<FlutterDesktopMessenger> (
800
+ state->messenger = FlutterDesktopMessengerReferenceOwner (
796
801
FlutterDesktopMessengerAddRef (new FlutterDesktopMessenger ()),
797
802
&FlutterDesktopMessengerRelease);
798
803
state->messenger ->SetEngine (state);
0 commit comments