Fix segfault on certain buffer sizes #86
Merged
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.
This was a lovely (awful) issue to fix, and was actually the core issue underpinning #74. When implementing the
lv_disp_t
, the LVGL docs specify that the driver object must be the first member of the struct. In #67 I changed the struct we have here to also hold the buffer, as this simplified both the API and the internal logic. However, I was not aware of the requirement re: struct layout, and Rust doesn't actually guarantee any specific type layout; so, on certain buffer sizes, the compiler was putting the buffer before the driver.On the bright side, all this segfault chasing has quadrupled my productivity with
lldb
.