java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at c2.server.SessionManager.expireSessions(SessionManager.java:130)
at c2.server.SessionExpiry.runThread(SessionExpiry.java:49)
at c2.prm.IThreadAdmin.run(IThreadAdmin.java:276)
When you look at the code in SessionMager.expireSessions(), this is how it looks like:
Set activeSessions = new HashSet();
for (Iterator iterator = activeSessions.iterator(); iterator.hasNext();)
{
Session session = (Session) iterator.next();
if (isSessionExpired(session))
{
activeSessions.remove(session);
}
}
The exception is thrown in the highlighted line. On first look, were you able to pinpoint what's wrong in this code?
I admit. I didn't see what's wrong at first. I did a lot of research on google and tried few suggestions but nothing worked. My project is built on Java 1.3 therefore it's not easy to apply a fix especially if the code is not compatible.
After asking someone to have a second look and while explaining the situation, I finally realized what was wrong. It is the following line:
activeSessions.remove(session);
So what it is trying to remove was an object from the collection itself!
By now you should have guessed the solution to this?
If you still haven't realized, the following is the solution.
Set activeSessions = new HashSet();
for (Iterator iterator = activeSessions.iterator(); iterator.hasNext();)
{
Session session = (Session) iterator.next();
if (isSessionExpired(session))
{
iterator.remove();
}
}
Highlight to see the answer :)
No comments:
Post a Comment