Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[wasm] WebAssembly crashes if building with non-Release/Debug build config #101629

Open
RPGillespie6 opened this issue Apr 26, 2024 · 5 comments
Open
Assignees
Labels
arch-wasm WebAssembly architecture area-Codegen-Interpreter-mono os-browser Browser variant of arch-wasm
Milestone

Comments

@RPGillespie6
Copy link

Description

Not actually sure if this is specifically a dotnet issue or a Skia issue, hoping to get some triage help.

Essentially the problem is that you cannot use custom build configurations if using SkiaSharp + WASM or it will mysteriously crash at runtime on SKPaint dispose (after a using block). But it usually doesn't crash right away, it takes around 79 dispose calls in the repro code before the crash:

image

Reproduction Steps

Repro repo: https://github.com/RPGillespie6/dotnet_skia_wasm_crash

Build with Release build configuration and observe that the code runs to completion. Build with Release_WASM build configuration and observe that the code crashes on SKPaint dispose after 79 iterations. Confirmed this repo reproduces the problem on 2 different PCs (one with Intel i9, one with AMD Ryzen 7).

We use custom build configurations to set different #if flags, so it's kind of annoying to work around. This is why I'm opening an issue with dotnet -- as far as I can tell, my custom config should have identical settings as Release since I used:

image

But that doesn't seem to be the case. If I use my custom config, I get mysterious runtime crashes.

Expected behavior

Release and Release_WASM build configs to produce identical runtime results

Actual behavior

Release_WASM results in mysterious crash on after 79 Skia object disposals

Regression?

No response

Known Workarounds

Stick to only using Release or Debug build configurations

Configuration

Everything is in here: https://github.com/RPGillespie6/dotnet_skia_wasm_crash/blob/master/WasmOnly.csproj

Other information

No response

@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2024
@dotnet-policy-service dotnet-policy-service bot added the untriaged New issue has not been triaged by the area owner label Apr 26, 2024
@jkotas jkotas added area-Codegen-Interpreter-mono and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Apr 27, 2024
Copy link
Contributor

Tagging subscribers to this area: @BrzVlad, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

@maraf maraf added arch-wasm WebAssembly architecture os-browser Browser variant of arch-wasm labels Apr 27, 2024
@maraf
Copy link
Member

maraf commented Apr 27, 2024

@RPGillespie6 Thank you for the report. It seems it is already fixed in .NET 9 previews, but the fix wasn't backported to .NET 8. Can you please try suggested workaround from #94939 (comment) ?

@maraf maraf added this to the 8.0.x milestone Apr 27, 2024
@maraf maraf self-assigned this Apr 27, 2024
@dotnet-policy-service dotnet-policy-service bot removed the untriaged New issue has not been triaged by the area owner label Apr 27, 2024
@RPGillespie6
Copy link
Author

RPGillespie6 commented Apr 27, 2024

Thanks, the suggested workaround from the linked comment appears to workaround the issue! We can close this issue. Is there an issue I can follow to track the progress of the backport to .NET 8 (or is backport not planned for .NET 8)?

@maraf
Copy link
Member

maraf commented Apr 27, 2024

Let's leave this one open at the moment. I'll update it based on backport plan

@RPGillespie6
Copy link
Author

RPGillespie6 commented Apr 30, 2024

@maraf A few other related issues I've come across:

  1. <EmccLinkOptimizationFlag>-lexports.js</EmccLinkOptimizationFlag> breaks AOT builds for us

I get crashes on page load that look like this:
image

and
image

  1. <EmccLinkOptimizationFlag>-lexports.js</EmccLinkOptimizationFlag> makes AOT builds take 5x as long

With emcc flag:

aot-instances.dll.bc -> aot-instances.dll.o [took 273.62s]

Without emcc flag:

aot-instances.dll.bc -> aot-instances.dll.o [took 50.04s]

If I remove the emcc flag from AOT builds, then I get a bunch of these at runtime:
image

Since AOT is so much faster than JIT, I'm back to just using Release and Debug build configurations again which seem to work. Deviating from these 2 build configurations seems like a minefield at the moment.

@RPGillespie6 RPGillespie6 changed the title [wasm] SkiaSharp crashes in WebAssembly if building with non-Release/Debug build config [wasm] WebAssembly crashes if building with non-Release/Debug build config Apr 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
arch-wasm WebAssembly architecture area-Codegen-Interpreter-mono os-browser Browser variant of arch-wasm
Projects
None yet
Development

No branches or pull requests

3 participants