mirror of
https://github.com/electron/electron.git
synced 2026-05-02 03:00:22 -04:00
#47171 migrated `std::deque` to `base::circular_deque` in `shell/common/crash_keys.cc`. However, `CrashKeyString` wraps a `crashpad::Annotation` that holds self-referential pointers and registers itself in a process-global linked list. `circular_deque` relocates elements on growth (via `VectorBuffer::MoveConstructRange`), leaving those pointers dangling — causing missing crash keys or a hung crashpad handler (especially on macOS). The `base/containers/README.md` warns: "Since `base::deque` does not have stable iterators and it will move the objects it contains, it may not be appropriate for all uses." Reverts to `std::deque`, whose block-based layout never relocates existing elements. Adds a regression test that registers 50 dynamic crash keys and verifies they all survive a renderer crash. Notes: Fixed crash keys being lost and the crash reporter hanging on macOS when many dynamic crash keys were registered. Made-with: Cursor Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Alexey Kozy <alexey@anysphere.co>