First major concern is that I got a ConcurrentModificationException when
iterating over a HashSet - this exception is completely meaningless in the
context of the browser (no threading).  There's also not really any
meaningful message in the stack trace:

00:20:24.446 [ERROR] Uncaught exception escaped
java.util.ConcurrentModificationException: null at
java.util.HashMap$HashIterator.nextEntry(HashMap.java:810) at
java.util.HashMap$KeyIterator.next(HashMap.java:845)

The relevant code that causes this is:

  private HashMap<ModelAction, HashSet<ModelListener>> models;
// .....
  HashSet<ModelListener> listeners = models.get(action);
    if (listeners != null) {
      for (ModelListener listener : listeners)
        listener.modelUpdated(action, info);
    }

Replacing it with a regular iterator:

      Iterator<ModelListener> iterator = listeners.iterator();
      while (iterator.hasNext())
          iterator.next().modelUpdated(action, info);

somehow fixes the problem.  Is the compiler screwing up in converting the
Java for-each notation into the iterator equivalent, or am I missing
something?

Some background:  this succeeds the first time it is called from within an
event handler context (to notify the model to perform a login attempt).
However, it fails the second time it is called when it is called from an
AsyncCallback context (returning the result that it was a successful
login).  However, at no point is the HashSet used modified (after startup
where it contains currently 1 element).

Thanks

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to