diff options
author | Christian W. Damus | 2013-11-07 21:43:35 +0000 |
---|---|---|
committer | Eike Stepper | 2013-11-12 13:12:31 +0000 |
commit | bb20bd893c859b12871f199654f21e46b51ac022 (patch) | |
tree | 77109d812a218b6a3389e2dfe0196a72c7e0b253 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo | |
parent | 452e6c6a3919d55c3074eb02aba46ec24081c487 (diff) | |
download | cdo-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.java | 31 |
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() |