Skip to content

Commit 6247736

Browse files
author
Lance Andersen
committed
8256018: Adler32/CRC32/CRC32C missing reachabilityFence
Reviewed-by: naoto, alanb
1 parent 436019b commit 6247736

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

src/java.base/share/classes/java/util/zip/Adler32.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
package java.util.zip;
2727

28+
import java.lang.ref.Reference;
2829
import java.nio.ByteBuffer;
2930
import sun.nio.ch.DirectBuffer;
3031

@@ -96,8 +97,12 @@ public void update(ByteBuffer buffer) {
9697
int rem = limit - pos;
9798
if (rem <= 0)
9899
return;
99-
if (buffer instanceof DirectBuffer) {
100-
adler = updateByteBuffer(adler, ((DirectBuffer)buffer).address(), pos, rem);
100+
if (buffer.isDirect()) {
101+
try {
102+
adler = updateByteBuffer(adler, ((DirectBuffer)buffer).address(), pos, rem);
103+
} finally {
104+
Reference.reachabilityFence(buffer);
105+
}
101106
} else if (buffer.hasArray()) {
102107
adler = updateBytes(adler, buffer.array(), pos + buffer.arrayOffset(), rem);
103108
} else {

src/java.base/share/classes/java/util/zip/CRC32.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
package java.util.zip;
2727

28+
import java.lang.ref.Reference;
2829
import java.nio.ByteBuffer;
2930
import java.util.Objects;
3031

@@ -95,8 +96,12 @@ public void update(ByteBuffer buffer) {
9596
int rem = limit - pos;
9697
if (rem <= 0)
9798
return;
98-
if (buffer instanceof DirectBuffer) {
99-
crc = updateByteBuffer(crc, ((DirectBuffer)buffer).address(), pos, rem);
99+
if (buffer.isDirect()) {
100+
try {
101+
crc = updateByteBuffer(crc, ((DirectBuffer)buffer).address(), pos, rem);
102+
} finally {
103+
Reference.reachabilityFence(buffer);
104+
}
100105
} else if (buffer.hasArray()) {
101106
crc = updateBytes(crc, buffer.array(), pos + buffer.arrayOffset(), rem);
102107
} else {

src/java.base/share/classes/java/util/zip/CRC32C.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
*/
2525
package java.util.zip;
2626

27+
import java.lang.ref.Reference;
2728
import java.nio.ByteBuffer;
2829
import java.nio.ByteOrder;
2930

@@ -170,9 +171,13 @@ public void update(ByteBuffer buffer) {
170171
return;
171172
}
172173

173-
if (buffer instanceof DirectBuffer) {
174-
crc = updateDirectByteBuffer(crc, ((DirectBuffer) buffer).address(),
175-
pos, limit);
174+
if (buffer.isDirect()) {
175+
try {
176+
crc = updateDirectByteBuffer(crc, ((DirectBuffer) buffer).address(),
177+
pos, limit);
178+
} finally {
179+
Reference.reachabilityFence(buffer);
180+
}
176181
} else if (buffer.hasArray()) {
177182
crc = updateBytes(crc, buffer.array(), pos + buffer.arrayOffset(),
178183
limit + buffer.arrayOffset());

0 commit comments

Comments
 (0)