Crash in [@ mozilla::ipc::MessageChannel::Send | mozilla::ipc::IProtocol::ChannelSend | IPC_Message_Name=PBackgroundLSSnapshot::Msg_CheckpointAndNotify]
Categories
(Core :: Storage: localStorage & sessionStorage, defect, P3)
Tracking
()
People
(Reporter: gsvelto, Assigned: jstutte)
References
Details
(Keywords: crash)
Crash Data
Attachments
(1 file, 2 obsolete files)
Crash report: https://crash-stats.mozilla.org/report/index/d1861606-3627-46ff-904f-d53fc0210419
MOZ_CRASH Reason: MOZ_CRASH(IPC message size is too large)
Top 10 frames of crashing thread:
0 xul.dll mozilla::ipc::MessageChannel::Send ipc/glue/MessageChannel.cpp:969
1 xul.dll mozilla::ipc::IProtocol::ChannelSend ipc/glue/ProtocolUtils.cpp:528
2 xul.dll mozilla::dom::PBackgroundLSSnapshotChild::SendCheckpointAndNotify ipc/ipdl/PBackgroundLSSnapshotChild.cpp:123
3 xul.dll mozilla::dom::LSSnapshot::Checkpoint dom/localstorage/LSSnapshot.cpp:923
4 xul.dll mozilla::dom::LSSnapshot::Run dom/localstorage/LSSnapshot.cpp:1004
5 xul.dll mozilla::CycleCollectedJSContext::AfterProcessTask xpcom/base/CycleCollectedJSContext.cpp:470
6 xul.dll nsThread::ProcessNextEvent xpcom/threads/nsThread.cpp:1196
7 xul.dll mozilla::ipc::MessagePump::Run ipc/glue/MessagePump.cpp:87
8 xul.dll MessageLoop::RunHandler ipc/chromium/src/base/message_loop.cc:328
9 xul.dll MessageLoop::Run ipc/chromium/src/base/message_loop.cc:310
It seems like under some circumstances local storage is sending an IPC message that's too large to handle and it's leading to this crash. The crash is happening on both Windows and macOS
| Assignee | ||
Comment 1•4 years ago
|
||
So we send an array of storage items that might be containing a) many items or b) big single items. In case a) we could split the array, case b) could only be handled on insert of new items (if we knew a suitable maximum size). It seems, that for now we do not care about any maximum during insert.
FWIW, the limit of an IPC message is 256 MB. And it seems we had a similar problem over in bug 1597211.
| Assignee | ||
Updated•4 years ago
|
Updated•3 years ago
|
Comment 4•3 years ago
|
||
Copying crash signatures from duplicate bugs.
| Assignee | ||
Comment 5•3 years ago
|
||
Updated•2 years ago
|
| Assignee | ||
Updated•2 years ago
|
| Assignee | ||
Comment 6•2 years ago
|
||
Comment 7•2 years ago
|
||
Comment on attachment 9335945 [details]
Bug 1706036 - Test with a checkpoint having a payload larger than IPC maximum message size. r?#dom-storage-reviewers
Revision D179117 was moved to bug 1706035. Setting attachment 9335945 [details] to obsolete.
Updated•2 years ago
|
Comment 8•2 years ago
|
||
Updated•2 years ago
|
Updated•2 years ago
|
Updated•2 years ago
|
| Assignee | ||
Comment 9•1 year ago
|
||
Looking at this I would probably favor 1 from [Jan's latest comment](https://phabricator.services.mozilla.com/D157648#6231532:
- Use the write optimizer even when there are observers in other content processes
This can break some sites, so we would need to experiment on Nightly only and then allow it on Release only for some users ?
It is the easiest implementation option and I would hope breakage to be minimal. The attempt to make a test for this shows, that a site would need to do so many changes to entries within one check point that it is hard to believe another tab could rely on reacting on all of them. We will always get notified about the latest change, which seems fine to me.
| Assignee | ||
Updated•1 year ago
|
Comment 10•1 year ago
|
||
Yeah, let's try to do it with an option to enable the old behavior if there are problems, so:
- Add a new "always coalesce" code path.
- Put it behind a pref
- Enable the pref on Nightly only
Updated•1 year ago
|
Updated•1 year ago
|
Description
•