@@ -45,11 +45,6 @@ struct _FlBinaryMessengerResponseHandle {
45
45
const FlutterPlatformMessageResponseHandle* response_handle;
46
46
};
47
47
48
- static void engine_weak_notify_cb (gpointer user_data, GObject* object) {
49
- FlBinaryMessenger* self = FL_BINARY_MESSENGER (user_data);
50
- self->engine = nullptr ;
51
- }
52
-
53
48
static FlBinaryMessengerResponseHandle* response_handle_new (
54
49
const FlutterPlatformMessageResponseHandle* response_handle) {
55
50
FlBinaryMessengerResponseHandle* handle =
@@ -64,6 +59,14 @@ static void response_handle_free(FlBinaryMessengerResponseHandle* handle) {
64
59
g_free (handle);
65
60
}
66
61
62
+ G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlBinaryMessengerResponseHandle,
63
+ response_handle_free);
64
+
65
+ static void engine_weak_notify_cb (gpointer user_data, GObject* object) {
66
+ FlBinaryMessenger* self = FL_BINARY_MESSENGER (user_data);
67
+ self->engine = nullptr ;
68
+ }
69
+
67
70
static gboolean fl_binary_messenger_platform_message_callback (
68
71
FlEngine* engine,
69
72
const gchar* channel,
@@ -145,12 +148,15 @@ G_MODULE_EXPORT gboolean fl_binary_messenger_send_response(
145
148
g_return_val_if_fail (FL_IS_BINARY_MESSENGER (self), FALSE );
146
149
g_return_val_if_fail (response_handle != nullptr , FALSE );
147
150
151
+ // Take reference to ensure it is freed
152
+ g_autoptr (FlBinaryMessengerResponseHandle) owned_response_handle =
153
+ response_handle;
154
+
148
155
if (self->engine == nullptr )
149
156
return TRUE ;
150
157
151
158
gboolean result = fl_engine_send_platform_message_response (
152
- self->engine , response_handle->response_handle , response, error);
153
- response_handle_free (response_handle);
159
+ self->engine , owned_response_handle->response_handle , response, error);
154
160
155
161
return result;
156
162
}
0 commit comments