mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-25 01:30:10 +00:00
7168505: (bf) MappedByteBuffer.load does not load buffer's content into memory
Reviewed-by: mduigou, forax
This commit is contained in:
parent
5f43f7c289
commit
2a928a555d
@ -139,6 +139,9 @@ public abstract class MappedByteBuffer
|
||||
return isLoaded0(mappingAddress(offset), length, Bits.pageCount(length));
|
||||
}
|
||||
|
||||
// not used, but a potential target for a store, see load() for details.
|
||||
private static byte unused;
|
||||
|
||||
/**
|
||||
* Loads this buffer's content into physical memory.
|
||||
*
|
||||
@ -157,15 +160,20 @@ public abstract class MappedByteBuffer
|
||||
long length = mappingLength(offset);
|
||||
load0(mappingAddress(offset), length);
|
||||
|
||||
// touch each page
|
||||
// Read a byte from each page to bring it into memory. A checksum
|
||||
// is computed as we go along to prevent the compiler from otherwise
|
||||
// considering the loop as dead code.
|
||||
Unsafe unsafe = Unsafe.getUnsafe();
|
||||
int ps = Bits.pageSize();
|
||||
int count = Bits.pageCount(length);
|
||||
long a = mappingAddress(offset);
|
||||
byte x = 0;
|
||||
for (int i=0; i<count; i++) {
|
||||
unsafe.getByte(a);
|
||||
x ^= unsafe.getByte(a);
|
||||
a += ps;
|
||||
}
|
||||
if (unused != 0)
|
||||
unused = x;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user