RFR : 7144488 StackOverflowError occurres on list via Collections.synchronizedList(List) (original) (raw)
Seán Coffey sean.coffey at oracle.com
Wed Feb 22 14:43:02 UTC 2012
- Previous message: RFR : 7144488 StackOverflowError occurres on list via Collections.synchronizedList(List)
- Next message: RFR : 7144488 StackOverflowError occurres on list via Collections.synchronizedList(List)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Yes, I stumbled across another few issues in the Collections class while looking to expand the testcase for this one. Below are other such cases.
Various hashCode methods lead to recursive calls and this has been discussed in the past. It's also mentioned in the javadocs (albeit somewhat vaguely)
Note: While it is permissible for lists to contain themselves as elements, extreme caution is advised: the equals and hashCode methods are no longer well defined on a such a list. http://www.velocityreviews.com/forums/t134246-infinite-loops-in-hashcode-and-equals.html
Due to the known issue, I wasn't planning on making any further changes.
regards, Sean.
List list = Collections.synchronizedList(new ArrayList());
list.add(list);
//int i = list.hashCode(); // recursive call
//list.remove(list); // recursive call (FIXED with 7144488)
/* Sets also suffer similar problems */
Set s = Collections.synchronizedSet(new HashSet());
s.add(s);
//s.remove(s); // recursive call
On 22/02/12 14:22, Alan Bateman wrote:
Sean - the fix looks okay to me but I assume there are other cases, like with SynchronizedSet and hashCode for example. I don't know if they are all fixable, at least not the hashCode cases.
-Alan.
- Previous message: RFR : 7144488 StackOverflowError occurres on list via Collections.synchronizedList(List)
- Next message: RFR : 7144488 StackOverflowError occurres on list via Collections.synchronizedList(List)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]