Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2013-11-07 21:43:35 +0000
committerEike Stepper2013-11-12 13:12:31 +0000
commitbb20bd893c859b12871f199654f21e46b51ac022 (patch)
tree77109d812a218b6a3389e2dfe0196a72c7e0b253 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo
parent452e6c6a3919d55c3074eb02aba46ec24081c487 (diff)
downloadcdo-bb20bd893c859b12871f199654f21e46b51ac022.tar.gz
cdo-bb20bd893c859b12871f199654f21e46b51ac022.tar.xz
cdo-bb20bd893c859b12871f199654f21e46b51ac022.zip
[421287] [Query] Failure to execute query results in hung async iterator
https://bugs.eclipse.org/bugs/show_bug.cgi?id=421287 Closing the iterator of a query result on an exception is not sufficient to unblock the asynchronous consumer waiting for results. The query result itself must be closed. Change-Id: I249ec98aa2d6b3d84afd41ef645299a938d1979d Also-by: Eike Stepper <stepper@esc-net.de>
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractQueryResult.java31
1 files changed, 16 insertions, 15 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractQueryResult.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractQueryResult.java
index ccee08594d..05e651615b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractQueryResult.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractQueryResult.java
@@ -8,6 +8,7 @@
* Contributors:
* Simon McDuff - initial API and implementation
* Eike Stepper - maintenance
+ * Christian W. Damus (CEA LIST) - bug 421287
*/
package org.eclipse.emf.cdo.spi.common;
@@ -26,24 +27,29 @@ import org.eclipse.net4j.util.WrappedException;
*/
public class AbstractQueryResult<T> implements BlockingCloseableIterator<T>
{
- private int queryID;
-
private CDOCommonView view;
private CDOQueryInfo queryInfo;
- private CDOQueryQueue<Object> linkQueue = new CDOQueryQueue<Object>();
+ private int queryID;
+
+ private CDOQueryQueue<Object> queue = new CDOQueryQueue<Object>();
- private BlockingCloseableIterator<Object> queueItr = linkQueue.iterator();
+ private BlockingCloseableIterator<Object> queueItr = queue.iterator();
/**
* @since 3.0
*/
public AbstractQueryResult(CDOCommonView view, CDOQueryInfo queryInfo, int queryID)
{
- this.queryID = queryID;
this.view = view;
this.queryInfo = queryInfo;
+ this.queryID = queryID;
+ }
+
+ public CDOCommonView getView()
+ {
+ return view;
}
/**
@@ -54,19 +60,14 @@ public class AbstractQueryResult<T> implements BlockingCloseableIterator<T>
return queryInfo;
}
- public CDOQueryQueue<Object> getQueue()
- {
- return linkQueue;
- }
-
- public CDOCommonView getView()
+ public int getQueryID()
{
- return view;
+ return queryID;
}
- public int getQueryID()
+ public CDOQueryQueue<Object> getQueue()
{
- return queryID;
+ return queue;
}
public void setQueryID(int queryID)
@@ -89,7 +90,6 @@ public class AbstractQueryResult<T> implements BlockingCloseableIterator<T>
public T next()
{
Object element = queueItr.next();
-
if (element instanceof Throwable)
{
if (element instanceof Error)
@@ -111,6 +111,7 @@ public class AbstractQueryResult<T> implements BlockingCloseableIterator<T>
public void close()
{
queueItr.close();
+ queue.close();
}
public boolean isClosed()

Back to the top