RFR: 8378354: Faulty assertion in checkInvariants method of ConcurrentHashMap
cdw200806
duke at openjdk.org
Fri Feb 20 18:38:11 UTC 2026
On Fri, 20 Feb 2026 15:05:18 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:
> > We should create an issue in JBS for this.
>
> I've now filed https://bugs.openjdk.org/browse/JDK-8378354.
>
> @cdw200806, please update the title of this PR to `8378354: Faulty assertion in checkInvariants method of ConcurrentHashMap` to initiate an official review of this change. Please also merge the latest changes from master branch into this PR.
@jaikiran @DougLea @AlanBateman @liach
Hi Colleagues in JDK, I also have another findings, but it is hard to fix. So I just mention here, please check. If you decide to raise a ticket to me, please share the ticket number to me, thanks.
Run this 4 line code in a main() method, JDK will throw StackOverflowError caused by recursion.
Before throw err, the console print "{(this Map)=Some String}"
ConcurrentHashMap map = new ConcurrentHashMap();
map.put(map, "Some String");
System.out.println(map);
map.put(map, "Some String");
The toString() method of ConcurrentHashMap seems to fixed this issue by replace this map to "(this Map)" .
But for hashCode() method of ConcurrentHashMap, it seems has not consider the recursion case.
Why hard to fix: consider this case, the key has recursion it self, it will throw StackOverflowError too.
ConcurrentHashMap map = new ConcurrentHashMap();
Map map2 = new HashMap();
map2.put(map2, "Some String");
map.put(map2, "Some String");
-------------
PR Comment: https://git.openjdk.org/jdk/pull/24612#issuecomment-3936476482
More information about the core-libs-dev
mailing list