-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
P4
-
None
-
Affects Version/s: 26
-
Component/s: core-libs
-
Fix Understood
Sonar detects that in this Spliterator we have the volatile field that we are modifying non-atomically:
private static class AckFrameSpliterator implements Spliterator.OfLong {
...
private volatile long largest;
private volatile long smallest;
private volatile long pn; // the current packet number
// The stream returns packet number in decreasing order
// (largest packet number is returned first)
private boolean ackAndDecId(LongConsumer action) {
assert ackFrame.isAcknowledging(pn)
: "%s is not acknowledging %s".formatted(ackFrame, pn);
action.accept(pn--); // <----- HERE
return true;
}
Given that Spliterators are not expected to be thread-safe, maybe the real question is why these fields are volatiles?
private static class AckFrameSpliterator implements Spliterator.OfLong {
...
private volatile long largest;
private volatile long smallest;
private volatile long pn; // the current packet number
// The stream returns packet number in decreasing order
// (largest packet number is returned first)
private boolean ackAndDecId(LongConsumer action) {
assert ackFrame.isAcknowledging(pn)
: "%s is not acknowledging %s".formatted(ackFrame, pn);
action.accept(pn--); // <----- HERE
return true;
}
Given that Spliterators are not expected to be thread-safe, maybe the real question is why these fields are volatiles?
- caused by
-
JDK-8349910 Implement JEP 517: HTTP/3 for the HTTP Client API
-
- Resolved
-
- links to
-
Review(master)
openjdk/jdk/28325