Closed Bug 1621360 Opened 5 years ago Closed 5 years ago

Crash in [@ trunc | cubeb_backend::capi::capi_stream_init<T>]

Categories

(Core :: Audio/Video: cubeb, defect, P1)

75 Branch
x86
Windows
defect

Tracking

()

RESOLVED FIXED
Tracking Status
firefox-esr68 --- unaffected
firefox73 --- unaffected
firefox74 --- unaffected
firefox75 blocking disabled
firefox76 + fixed

People

(Reporter: philipp, Assigned: kinetik)

References

(Regression)

Details

(Keywords: crash, regression)

Crash Data

Attachments

(1 file)

This bug is for crash report bp-13691418-d971-4aba-b7db-93b590200310.

Top 10 frames of crashing thread:

0 xul.dll RustMozCrash mozglue/static/rust/wrappers.cpp:16
1 xul.dll mozglue_static::panic_hook mozglue/static/rust/lib.rs:89
2 xul.dll core::ops::function::Fn::call<fn src/libcore/ops/function.rs:232
3 xul.dll std::panicking::rust_panic_with_hook src/libstd/panicking.rs:475
4 xul.dll std::panicking::begin_panic_handler src/libstd/panicking.rs:375
5 xul.dll core::panicking::panic_fmt src/libcore/panicking.rs:84
6 xul.dll trunc 
7 xul.dll cubeb_backend::capi::capi_stream_init<audioipc_client::context::ClientContext> third_party/rust/cubeb-backend/src/capi.rs:155
8 xul.dll cubeb_stream_init media/libcubeb/src/cubeb.c:335
9 xul.dll mozilla::AudioStream::OpenCubeb dom/media/AudioStream.cpp:322

this content crash signature is newly showing up in the 75 cycle - so far it only seems to hit 32bit users on windows.

MOZ_CRASH Reason is commonly showing calledResult::unwrap()on anErrvalue: Error(Io(Os { code: 0, kind: Other, message: "The operation completed successfully." }), State { next_error: None }) or translated variations thereof...

This must be fallout from bug 1432303, otherwise cubeb_backend::capi::capi_stream_init wouldn't be in the stack. Unfortunately, the stack has nothing useful after that to narrow down where this is failing.

Assignee: nobody → kinetik
Priority: -- → P2
Regressed by: 1432303
Has Regression Range: --- → yes

trunc seems to be bad unwinding, I can't see how that's a real possible stack frame at that point. cubeb_backend::capi::capi_stream_init@155 means we're within audioipc's ClientStream::init when we hit the unexpected unwrap().

The error implies we turned an ERROR_SUCCESS (0x0) into an std::io::Error somewhere, which seems wrong but is unclear. Given this is 32-bit only, it could be related to handling of shmem and hitting virtual address space limits - although in each of the 21 crashes, the virtual memory is > 550MB and usually > 800MB, so perhaps not.

This crash is pretty bad on 75 (#2 top content crash), I don't think we can ship with it.

This bug is tracked by a release manager but with a small severity so change it to major.
For more information, please visit auto_nag documentation.

Severity: normal → major

Working on reproducing and debugging locally.

Worst case plan: we can pref off AudioIPC for 32-bit Windows only to buy time, but suspect that's not ideal for sandboxing team's plans.

Status: NEW → ASSIGNED
Priority: P2 → P1
Attached file GitHub Pull Request

I couldn't reproduce this locally with a 32-bit Windows build during normal/heavy browser use. Following my guess from comment 2 on virtual address space limits, I can reproduce this by repeatedly loading a page of 200 autoplaying videos.

After the third or fourth attempt to load the page, the content tab will crash with a similar stack to the crash reports. Caught in a debugger with better stack unwinding, it's clear that the panicking unwrap is during shmem setup for a client stream. Inside memmap-rs, MapViewOfFile returns nullptr (with a GetLastError of 8, which is ERROR_NOT_ENOUGH_MEMORY).

The linked PR resolves this by treating shmem setup failure on the client as non-fatal, instead aborting the audio stream setup.

I'm still not sure why the unwrapped error in the crash report shows the incorrect error number and name. I originally thought the last error was clobbered by an interleaved CloseHandle, but since verified that was not the issue. The Error constructed after MapViewOfFile fails contains an OsRepr(8), as expected, but by the time the error has been converted/returned/unwrapped (possibly because std::io:Error treats this type as an unknown "Other" error and suffers a lossy conversion?) it has an internal error code of 0 which results in the error message string being "The operation completed successfully." when formatted.

Matthew, would you mind filing a bug to disable audioipc on 32-bit windows in 75? That seems like the safest course at this point.

Flags: needinfo?(kinetik)
See Also: → 1622931
Depends on: 1623793

(In reply to Julien Cristau [:jcristau] from comment #9)

Matthew, would you mind filing a bug to disable audioipc on 32-bit windows in 75? That seems like the safest course at this point.

https://bugzilla.mozilla.org/show_bug.cgi?id=1623793

Flags: needinfo?(kinetik)
Blocks: 1623798
Depends on: 1623799

AFAICT, we haven't seen any crashes on Nightly since bug 1623799 landed, and the crashes went away on Beta as expected after bug 1623793 landed there. How long did you want to give this bug before declaring victory?

Flags: needinfo?(kinetik)

I think we can mark this fixed. There is a possibility that this fix converts crashes into non-functioning audio for users that would've crashed, as the low address space explanation for the crash doesn't seem to fit the memory reports for all crashes, but I'm unsure how reliable those stats are. I'll keep an eye on reports for Nightly.

Status: ASSIGNED → RESOLVED
Closed: 5 years ago
Flags: needinfo?(kinetik)
Resolution: --- → FIXED

Please specify a root cause for this bug. See :tmaity for more information.

Root Cause: --- → ?
Root Cause: ? → Coding: Runtime Error
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: