summaryrefslogtreecommitdiffstats
path: root/server/src
diff options
context:
space:
mode:
authorHenrik Paul <henrik@vaadin.com>2013-10-18 15:06:03 +0300
committerHenrik Paul <henrik@vaadin.com>2013-10-18 15:06:03 +0300
commitdf3d643b3aaa3112d59e2ae0fb3649dd37e927a7 (patch)
tree481b2eb92e88dcb977a68b3f4d74d8caa5ed828a /server/src
parent85251833de3bd101d388b20fdb9b02c532a9f1c9 (diff)
parentebdc3652764e8ec2ce292879d459a8d0c6c2d2e3 (diff)
downloadvaadin-framework-df3d643b3aaa3112d59e2ae0fb3649dd37e927a7.tar.gz
vaadin-framework-df3d643b3aaa3112d59e2ae0fb3649dd37e927a7.zip
Merge commit 'ebdc3652764e8ec2ce292879d459a8d0c6c2d2e3'
Conflicts: server/src/com/vaadin/server/VaadinSession.java Change-Id: I51383060a95354b7ffbcc5b12683c1d1a817b8bf
Diffstat (limited to 'server/src')
-rw-r--r--server/src/com/vaadin/server/VaadinSession.java27
1 files changed, 18 insertions, 9 deletions
diff --git a/server/src/com/vaadin/server/VaadinSession.java b/server/src/com/vaadin/server/VaadinSession.java
index 8f15dacc98..89259c53ca 100644
--- a/server/src/com/vaadin/server/VaadinSession.java
+++ b/server/src/com/vaadin/server/VaadinSession.java
@@ -16,6 +16,8 @@
package com.vaadin.server;
+import java.io.IOException;
+import java.io.ObjectInputStream;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Collection;
@@ -202,10 +204,10 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
* session is serialized as long as it doesn't happen while some other
* thread has the lock.
*/
- private transient ConcurrentLinkedQueue<FutureAccess> pendingAccessQueue;
+ private transient ConcurrentLinkedQueue<FutureAccess> pendingAccessQueue = new ConcurrentLinkedQueue<FutureAccess>();
/**
- * Create a new service session tied to a Vaadin service
+ * Creates a new VaadinSession tied to a VaadinService.
*
* @param service
* the Vaadin service for the new session
@@ -1260,18 +1262,15 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
}
/**
- * Gets the queue of tasks submitted using {@link #access(Runnable)}.
+ * Gets the queue of tasks submitted using {@link #access(Runnable)}. It is
+ * safe to call this method and access the returned queue without holding
+ * the {@link #lock() session lock}.
*
* @since 7.1
*
- * @return the pending access queue
+ * @return the queue of pending access tasks
*/
public Queue<FutureAccess> getPendingAccessQueue() {
- if (pendingAccessQueue == null) {
- // pendingAccessQueue is transient, so will be null after
- // deserialization
- pendingAccessQueue = new ConcurrentLinkedQueue<FutureAccess>();
- }
return pendingAccessQueue;
}
@@ -1288,6 +1287,16 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
}
/**
+ * Override default deserialization logic to account for transient
+ * {@link #pendingAccessQueue}.
+ */
+ private void readObject(ObjectInputStream stream) throws IOException,
+ ClassNotFoundException {
+ stream.defaultReadObject();
+ pendingAccessQueue = new ConcurrentLinkedQueue<FutureAccess>();
+ }
+
+ /**
* Finds the UI with the corresponding embed id.
*
* @since 7.2