-
Bug
-
Resolution: Fixed
-
P3
-
8, 9
-
b13
-
generic
-
generic
-
Verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8208974 | 8u201 | Vyom Tewari | P3 | Resolved | Fixed | b01 |
JDK-8203910 | 8u192 | Deepak Kejriwal | P3 | Resolved | Fixed | b01 |
JDK-8216876 | emb-8u201 | Vyom Tewari | P3 | Resolved | Fixed | master |
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
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
- backported by
-
JDK-8203910 Incorrect usage of Iterator in Java 8 In com.sun.jndi.ldap.EventSupport.removeNamingListener
-
- Resolved
-
-
JDK-8208974 Incorrect usage of Iterator in Java 8 In com.sun.jndi.ldap.EventSupport.removeNamingListener
-
- Resolved
-
-
JDK-8216876 Incorrect usage of Iterator in Java 8 In com.sun.jndi.ldap.EventSupport.removeNamingListener
-
- Resolved
-