Gecko is progressively adding support for out of process crashes in the Electrolysis project.
Out of Process Plugin Crash
An Out of Process Plugin (OOPP) crash is a crash wherby a plugin (such as Adobe Flash) that is running in its own process outside of the browser's master process has crashed. The browser displays a notice that the plugin has crashed, but the browser remains unaffected.
A special case of an OOPP is a hung OOPP, where the process isn't responding. In this case Breakpad will generate a hangid and two crash reports. Crash reports will have a hangid that is non-null. There will typically be a pair of crash reports with the same hangid.
- Browser hang - the controlling processes
- OOPP hang - the plugin that crashed
The browser displays a notice that the process has stopped responding, but the browser otherwise remains unaffected. The browser hang is for context and doesn't mean it crashed completely.
It's possible for there to be more than two crashes with the same hangid, if crashes are resubmitted.
Future Process Types
In the future, the types OOP hangs may include be OOPC (Content), OOPJ (Jetpack), etc.
Traditional crashes are either:
- Non OOPP Crash (master process such as Firefox crash)
- OOPP which responded to the kill signal
These crashes will have a NULL hangid in the reports table.
In [[Socorro/SocorroUI/Advanced_Search|Advanced Search], you may filter search to find:
- Crashes only (Traditional, OOPP)
- Hangs only (Browser, OOPP)
- And you can refine the search with Process Details
- OOPP name
The reports table is joined with the reports_plugins table and plugins table for capturing metadata such as plugin name, filename, and version.
Bug#535829 has a sketch of the next step for database support for OOPC and OOPJ.
Basically we'd have a crash_processes table with a type code (P - plugins, C - content, J - Jetpcack, etc) and then any new details tables that match the reports_plugins pattern.
- Be sure to change the hangid in your raw json before submitting crashes
- Something helpful that you'll find buried in PHP documentation is this, which depicts ways to query/identify each type of browser/plugin crash/hang.
| ANY Report Type | CRASH | OOPP HANG ANY PROCESS | hang=Any proc=Any | hangid=null proc=Any | hangid=123 Proc=Any BROWSER | hang=Any proc=Bro | hangid=null proc=Bro | hangid=123 Proc=Bro PLUG-IN | hang=Any proc=Plu | hangid=null proc=Plu | hangid=123 Proc=Plu
[File:] - Browser Hang [File:] - Plugin (Plugin Crash or Plugin Hang) [File:] - Hang (Plugin Hang or Browser Hang)