The reasons is a bad interaction between FIND_MEMORY_STOMPS code in AsyncLoading.cpp and memory pooling.
Async loading will set PrecacheBuffer to read/only and will never reset it back, expecting that the pages will be unmapped (with all their attributes reset) after calling BinnedFreeToOS(). Since this does not happen when BinnedAlloc/Free allocations are pooled, there is a good chance that these read-only pages will be reused later by the code that does not know about the read only permissions being set on them.
Memory pooling is new to 4.16. This bug makes 4.16 cooked games (with non-trivial content, so our templates are probably fine) crash, so it is a 4.16 blocker.
This actually happened on a licensee project, I am not sure that we can reproduce in house. Writing the steps down as I believe would be correct, without testing.
1. Have a project with non-trivial content
2. Package a cooked game
3. Observe it crash during the load
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-44864 in the post.
0 |
Component | UE - Platform - Linux |
---|---|
Affects Versions | 4.16 |
Target Fix | 4.16.1 |
Created | May 9, 2017 |
---|---|
Resolved | May 26, 2017 |
Updated | Jan 31, 2018 |