summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2011-08-22 14:39:48 +0000
committerLeif Åstrand <leif@vaadin.com>2011-08-22 14:39:48 +0000
commit7ee4a17e64c9cd6bea335950d71a046274409cca (patch)
treed50d3fba8f4625ad2512032787c61697a663aa07 /src
parent1c9efd41dc2950f40b4ebfa7dd17c43116e03fe0 (diff)
downloadvaadin-framework-7ee4a17e64c9cd6bea335950d71a046274409cca.tar.gz
vaadin-framework-7ee4a17e64c9cd6bea335950d71a046274409cca.zip
#7065 ConcurrentModificationException in AbstractWebApplicationContext.endTransaction() and startTransaction()
svn changeset:20545/svn branch:6.7
Diffstat (limited to 'src')
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java b/src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java
index 02218f4bc2..752e4c4760 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java
@@ -7,6 +7,7 @@ import java.io.PrintWriter;
import java.io.Serializable;
import java.io.StringWriter;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -60,10 +61,12 @@ public abstract class AbstractWebApplicationContext implements
* the HTTP or portlet request that triggered the transaction.
*/
protected void startTransaction(Application application, Object request) {
+ ArrayList<TransactionListener> currentListeners;
synchronized (listeners) {
- for (TransactionListener listener : listeners) {
- listener.transactionStart(application, request);
- }
+ currentListeners = new ArrayList<TransactionListener>(listeners);
+ }
+ for (TransactionListener listener : currentListeners) {
+ listener.transactionStart(application, request);
}
}
@@ -78,16 +81,19 @@ public abstract class AbstractWebApplicationContext implements
protected void endTransaction(Application application, Object request) {
LinkedList<Exception> exceptions = null;
+ ArrayList<TransactionListener> currentListeners;
synchronized (listeners) {
- for (TransactionListener listener : listeners) {
- try {
- listener.transactionEnd(application, request);
- } catch (final RuntimeException t) {
- if (exceptions == null) {
- exceptions = new LinkedList<Exception>();
- }
- exceptions.add(t);
+ currentListeners = new ArrayList<TransactionListener>(listeners);
+ }
+
+ for (TransactionListener listener : currentListeners) {
+ try {
+ listener.transactionEnd(application, request);
+ } catch (final RuntimeException t) {
+ if (exceptions == null) {
+ exceptions = new LinkedList<Exception>();
}
+ exceptions.add(t);
}
}