Fix: Resolved a memory error caused by incompatible std::map implementations when multiple plugins were compiled with different C++ standards. #167804
+119
−16
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix: Resolved a memory error caused by incompatible std::map implementations when multiple plugins were compiled with different C++ standards.
Issue Description:
A crash occurred due to a mismatch in std::map ABI when two plugins were statically linked for debugging:
window_manager was compiled with C++20 (cxx_std_20).
ump_video_plugin was compiled with C++17 (cxx_std_17).
The error manifested in plugin_registrar.h where a std::map held plugin instances:
using WrapperMap = std::map<FlutterDesktopPluginRegistrarRef, std::unique_ptr>;
Root Cause:
When window_manager registered first, it initialized PluginRegistrarManager::GetInstance() with a std::map constructed under C++20.
Later, ump_video_plugin (using C++17) attempted to access the same map, leading to memory corruption due to ABI incompatibility between the two std::map implementations.
Solution: Embed Standard Library and Memory Allocation Within the Singleton