POSIX osDecommitMemory has nasty compatibility problems
osDecommitMemory in rts/posix/OSMem.c currently does the following,
#ifdef MADV_FREE
// Try MADV_FREE first, FreeBSD has both and MADV_DONTNEED
// just swaps memory out
r = madvise(at, size, MADV_FREE);
#else
r = madvise(at, size, MADV_DONTNEED);
#endif
if(r < 0)
sysErrorBelch("unable to decommit memory");
As it turns out, the Linux kernel as of 4.5 supports MADV_FREE. This means that binary distributions built in such environments will use MADV_FREE, even if running on an older kernel that does not support this advice. Ultimately this means that any attempt to decommit will fail.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | high |
| Resolution | Unresolved |
| Component | Runtime System |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | simonmar |
| Operating system | |
| Architecture |