`jdk.internal.foreign.SegmentFactories::allocateNativeInternal` assumes that 
the underlying implementation of malloc aligns allocations on 16 byte 
boundaries for 64 bit platforms, and 8 byte boundaries on 32 bit platforms. So 
for any allocation where the requested alignment is less than or equal to this 
default alignment it makes no adjustment.

However, this assumption does not hold for all allocators. Specifically 
jemallc, used by libc on FreeBSD will align small allocations on 8 or 4 byte 
boundaries, respectively. This causes allocateNativeInternal to sometimes 
return memory that is not properly aligned when the requested alignment is 
exactly 16 bytes.

To make sure we honour the requested alignment when it exaclty matches the 
quantum as defined by MAX_MALLOC_ALIGN, this patch ensures that we adjust the 
alignment also in this case.

This should make no difference for platforms where malloc allready aligns on 
the quantum, except for a few unnecessary trivial calculations.

This work was sponsored by: The FreeBSD Foundation

-------------

Commit messages:
 - 8371637: allocateNativeInternal sometimes return incorrectly aligned memory

Changes: https://git.openjdk.org/jdk/pull/28235/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28235&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8371637
  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/28235.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28235/head:pull/28235

PR: https://git.openjdk.org/jdk/pull/28235

Reply via email to