Description

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.

Steps to Reproduce

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

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-44864 in the post.

0
Login to Vote

Fixed
ComponentUE - Platform - Linux
Affects Versions4.16
Target Fix4.16.1
Fix Commit3462664
Main Commit3449078
CreatedMay 9, 2017
ResolvedMay 26, 2017
UpdatedJan 31, 2018