Fix iterator invalidation in panel_manager::deserialize() #29331
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.
Summary
SUMMARY: Bugfixes "Fix iterator invalidation in panel_manager::deserialize()."
Purpose of change
Discovered while debugging a Debug build which crashed in panel_manager::deserialize(); pannels.cpp
The crash didn't show up in the release build but looking at the debugger on the Debug build it was clearly coming from the debug allocator on
it->toggle
where the pointer validation was wrong (honestly it took me some time to understand what was the problem...).It happens that
erase()
andinsert()
invalidate iterators and all elements after the iterator, as per the C++ reference.Describe the solution
Simply set the current iterator as the one returned by
layout.insert()
:Describe alternatives you've considered
N/A.
Additional context
After this fix and a rebuild, the code doesn't trigger a crash and the panels seems to be working as intended.