FULL PRODUCT VERSION : A DESCRIPTION OF THE PROBLEM : Class: com.sun.jndi.ldap.EventSupport IntelliJ decomplier code below code below: In jdk1.7.0_80 in rt.jar synchronized void removeNamingListener(NamingListener var1) { Enumeration var2 = this.notifiers.elements(); while(var2.hasMoreElements()) { NamingEventNotifier var3 = (NamingEventNotifier)var2.nextElement(); if(var3 != null) { var3.removeNamingListener(var1); if(!var3.hasNamingListeners()) { var3.stop(); this.notifiers.remove(var3.info); -> Works fine, since it���s Enumeration and not iterator } } } if(this.unsolicited != null) { this.unsolicited.removeElement(var1); } } jdk1.8.0_112 in rt.jar synchronized void removeNamingListener(NamingListener var1) { Iterator var2 = this.notifiers.values().iterator(); while(var2.hasNext()) { NamingEventNotifier var3 = (NamingEventNotifier)var2.next(); if(var3 != null) { var3.removeNamingListener(var1); if(!var3.hasNamingListeners()) { var3.stop(); this.notifiers.remove(var3.info); -> Clearly an incorrect usage of iterator.. This throws a concurrent modification exception } } } if(this.unsolicited != null) { this.unsolicited.removeElement(var1); } } REGRESSION. Last worked in version 7u80 EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - Remove listener without ACTUAL - Not removing listener ERROR MESSAGES/STACK TRACES THAT OCCUR : java.util.ConcurrentModificationException: null at java.util.Hashtable$Enumerator.next(Hashtable.java:1378) at com.sun.jndi.ldap.EventSupport.removeNamingListener(EventSupport.java:211) at com.sun.jndi.ldap.LdapCtx.removeNamingListener(LdapCtx.java:3445) REPRODUCIBILITY : This bug can be reproduced always. CUSTOMER SUBMITTED WORKAROUND : Not use the remove listener metod
|