Author: gnodet
Date: Mon Jul 13 15:20:15 2015
New Revision: 1690737
URL: http://svn.apache.org/r1690737
Log:
[FELIX-4942] Make sure all exceptions are propagated back to the caller when
using the executor
Modified:
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
Modified:
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java?rev=1690737&r1=1690736&r2=1690737&view=diff
==============================================================================
---
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
(original)
+++
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
Mon Jul 13 15:20:15 2015
@@ -2355,6 +2355,7 @@ public class ResolverImpl implements Res
{
private final Executor executor;
private final AtomicInteger count = new AtomicInteger();
+ private Throwable throwable;
public EnhancedExecutor(Executor executor)
{
@@ -2372,6 +2373,16 @@ public class ResolverImpl implements Res
{
runnable.run();
}
+ catch (Throwable t)
+ {
+ synchronized (count)
+ {
+ if (throwable == null)
+ {
+ throwable = t;
+ }
+ }
+ }
finally
{
if (count.decrementAndGet() == 0)
@@ -2400,6 +2411,21 @@ public class ResolverImpl implements Res
{
throw new IllegalStateException(e);
}
+ if (throwable != null)
+ {
+ if (throwable instanceof RuntimeException)
+ {
+ throw (RuntimeException) throwable;
+ }
+ else if (throwable instanceof Error)
+ {
+ throw (Error) throwable;
+ }
+ else
+ {
+ throw new RuntimeException(throwable);
+ }
+ }
}
}
}