Fix segmentation fault error when using Linux Framebuffer DRM mode with AOT compilation #14266
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does the pull request do?
Changes how the
offsets
uint array variable is instantiated for theAvalonia.LinuxFramebuffer.Output.DrmOutput:GetFbIdForBo(IntPtr bo)
method, so that it's explicitly created as a 4-length array.What is the current behavior?
When compilting an Avalonia application with AOT compilation, at least for the
linux-64
runtime with the .NET 8.0 SDK, if DRM mode is used then a fatal Segmentation fault will be thrown from the invoked libdrm library. This appears to be due to the aforementionedoffsets
variable being a zero-length array when the library tries to copy data into it.The application when built via JIT compilation seems to be clever enough to figure out that the array must have a certain length, but when compiled with AOT does not.
What is the updated/expected behavior with this PR?
The libdrm function successfully manages to copy memory to the
offsets
variable, even when application is AOT compiled.How was the solution implemented (if it's not obvious)?
Explicitly instantializes the
offsets
variable as a 4-length uint array, rather than as an empty array.Checklist
Breaking changes
Obsoletions / Deprecations
Fixed issues
Fixes #14227