fix(database,windows): marshal listener callbacks onto the platform thread - #18656
fix(database,windows): marshal listener callbacks onto the platform thread#18656SelaseKay wants to merge 3 commits into
Conversation
…hread SDK callbacks were writing to Flutter EventSinks and Pigeon replies from a worker thread, which crashes the Windows embedder. Hop those calls onto the platform thread and serialize listener teardown with in-flight callbacks.
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. |
MSVC prefers the optional<FlutterError> overload over the ErrorOr template when the second argument is a raw EncodableMap. Spell the template argument so QueryGet can compile.
Description
On Windows, Realtime Database listener callbacks and
Future::OnCompletionreplies were sent to Flutter from the C++ SDK worker thread. That trips the engine's non-platform-thread check and can crash the process; cancelling a subscription could also delete a listener whileOnValueChangedwas still running.This hops EventSink and Pigeon replies onto the platform thread (same HWND dispatcher pattern as
cloud_firestore) and serializes listener teardown with in-flight SDK callbacks.Related Issues
Checklist
///).melos run analyze) does not report any problems on my PR.Breaking Change
Test plan
onValue/ child events and confirm nonon-platform threadengine errorset/get/runTransactionstill complete successfully (OnCompletion replies)cancels in-flight value listeners on distinct paths without error)