Closed Bug 1035694 Opened 10 years ago Closed 7 years ago

Display AsyncShutdownTimeout stacks and states

Categories

(Socorro :: General, task)

task
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: Yoric, Unassigned)

References

Details

Now that bug 1034726 has landed, AsyncShutdownTimeout crashes may contain JavaScript stacks that will generally be much more useful than the native stack. Among other applications, they should often let us determine at a glance whether the offending code is an add-on. However, reading the stacks from the JSON will be quite annoying. Also, the AsyncShutdownTimeout metadata contains optional state information, which is critical for finding out in which state the component was during the crash.

It would be great if we could display both the JS stacks and the state information, if available, on the main page, before the native stacks.

The data structure contained in the AsyncShutdownTimeout payload looks like:

{
  phase: string,
  conditions: array of [{
    name: string, // <=== Display this
    stack: optional string, // <== And that
    state: either arbitrary JSON or the string "(none)" <== And that
    // ...
  }]
}

e.g.

{
  phase: "profile-before-change",
  conditions: [
    {
      name: "OS.File flushing its data during profileBeforeChange",
      stack: "chrome://resources/osfile/osfile_async_front.jsm:104\n....",
      state: {shutdown: false, started: true, ...},
      // ...
    },
    {
      name: "Sqlite.jsm flushing its data during profileBeforeChange",
      stack: "...",
      state: "(none)",
      // ...
  ]
}


I would like to see something along the lines of

*** JS Stacks
 Client: OS.File flushing its data during profileBeforeChange
 stack: chrome://resources/osfile/osfile_async_front.jsm:104
        chrome://...
        // ...
        offending_add_on.jsm
 state: {shutdown: false, started: true, ...}

 Client: Sqlite.jsm flushing its data during profileBeforeChange
 stack: chrome://...
        // ...
        offending_internal_client.jsm
 state: (none)
Flags: needinfo?(benjamin)
The data is all in the metadata tab and available via the API. For now, I suggest you just write a little tool to display this the way you want.
Actually, as far as I can tell, the data is not available via the API unless we download every single raw crash in the time range. Filed as bug 1035694.
Flags: needinfo?(benjamin)
You need to log in before you can comment on or make changes to this bug.