Yes should use a cop[y, it is a mistake to use a unmodifiable view.
Here is the new webrev:
http://cr.openjdk.java.net/~sjiang/JDK-7120365/webrev.02/
I have added a new test to reproduce the bug in an almost sure way.
Thanks,
Shanliang
Alan Bateman wrote:
On 24/12/2012 14:08, shanliang wrote:
webrev: http://cr.openjdk.java.net/~sjiang/JDK-7120365/webrev.00/
The test is correct, it was implemented to verify the fix for bug
4911721, but in addition it detects luckily another problem within
the method ServerNotifForwarder.snoopOnUnregister
The problem was that during a "for" cycle, the set list was modified
by anther thread, the solution is to use a unmodifiable set.
This fix is important, it not only re-enables a test, but also fixes
a concurrent modification bug in the jmx notification.
Shanliang
Are you sure this is right? I don't know this code but from a brief
glance then it appears to me that all access to listenerMap requires
first synchronizes on it and maybe you need to do this and then take a
copy (not a unmodifiable view) of the delegate set before you iterate
over it. Apologies if you looked at this in detail, it's just not
clear to me how using an unmodifiable view fixes the problem if the
issue is actually that other threads are modifying the set.
-Alan