From a69dfff93b41b30ae8e237817548baf50d0c1287 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Thu, 24 Oct 2024 14:45:35 +0300 Subject: [PATCH] flutter_desktop: Remove asio::post call Do not dispatch/post the key event keycode using asio::post as that seems to cause crashes as the messenger pointer seems to be go out of scope or seems to be invalid. Bug-AGL: SPEC-5272 Signed-off-by: Marius Vlad --- shell/platform/homescreen/flutter_desktop.cc | 65 ++++++++++---------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/shell/platform/homescreen/flutter_desktop.cc b/shell/platform/homescreen/flutter_desktop.cc index bb5be4b..5d26dd9 100644 --- a/shell/platform/homescreen/flutter_desktop.cc +++ b/shell/platform/homescreen/flutter_desktop.cc @@ -161,40 +161,37 @@ std::future PostMessengerSendWithReply( void* user_data) { const auto promise(std::make_shared>()); auto promise_future(promise->get_future()); - asio::post(*messenger->GetEngine()->platform_task_runner->GetStrandContext(), - [&, promise, channel, message, message_size, reply, user_data]() { - FlutterPlatformMessageResponseHandle* response_handle = nullptr; - if (reply != nullptr && user_data != nullptr) { - const FlutterEngineResult result = - LibFlutterEngine->PlatformMessageCreateResponseHandle( - messenger->GetEngine()->flutter_engine, reply, - user_data, &response_handle); - if (result != kSuccess) { - spdlog::error("Failed to create response handle"); - promise->set_value(false); - return; - } - } - - auto platform_message = std::make_unique(); - platform_message->struct_size = sizeof(FlutterPlatformMessage); - platform_message->channel = channel; - platform_message->message = message; - platform_message->message_size = message_size; - platform_message->response_handle = response_handle; - - const FlutterEngineResult message_result = - LibFlutterEngine->SendPlatformMessage( - messenger->GetEngine()->flutter_engine, - platform_message.release()); - - if (response_handle != nullptr) { - LibFlutterEngine->PlatformMessageReleaseResponseHandle( - messenger->GetEngine()->flutter_engine, response_handle); - } - - promise->set_value(message_result == kSuccess); - }); + + FlutterPlatformMessageResponseHandle* response_handle = nullptr; + if (reply != nullptr && user_data != nullptr) { + const FlutterEngineResult result = + LibFlutterEngine->PlatformMessageCreateResponseHandle( + messenger->GetEngine()->flutter_engine, reply, user_data, + &response_handle); + if (result != kSuccess) { + spdlog::error("Failed to create response handle"); + promise->set_value(false); + return promise_future; + } + } + + auto platform_message = std::make_unique(); + platform_message->struct_size = sizeof(FlutterPlatformMessage); + platform_message->channel = channel; + platform_message->message = message; + platform_message->message_size = message_size; + platform_message->response_handle = response_handle; + + const FlutterEngineResult message_result = + LibFlutterEngine->SendPlatformMessage( + messenger->GetEngine()->flutter_engine, platform_message.release()); + + if (response_handle != nullptr) { + LibFlutterEngine->PlatformMessageReleaseResponseHandle( + messenger->GetEngine()->flutter_engine, response_handle); + } + + promise->set_value(message_result == kSuccess); return promise_future; } -- 2.43.0