diff --git a/core/src/main/java/io/grpc/internal/LogExceptionRunnable.java b/core/src/main/java/io/grpc/internal/LogExceptionRunnable.java index 359a35f9c5..2b0e5b2a05 100644 --- a/core/src/main/java/io/grpc/internal/LogExceptionRunnable.java +++ b/core/src/main/java/io/grpc/internal/LogExceptionRunnable.java @@ -33,6 +33,8 @@ package io.grpc.internal; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.base.Throwables; + import java.util.logging.Level; import java.util.logging.Logger; @@ -56,7 +58,8 @@ public final class LogExceptionRunnable implements Runnable { task.run(); } catch (Throwable t) { log.log(Level.SEVERE, "Exception while executing runnable " + task, t); - throw t instanceof RuntimeException ? (RuntimeException) t : new RuntimeException(t); + Throwables.propagateIfPossible(t); + throw new AssertionError(t); } } diff --git a/core/src/main/java/io/grpc/internal/ServerImpl.java b/core/src/main/java/io/grpc/internal/ServerImpl.java index a4a40cb9ba..08777309b7 100644 --- a/core/src/main/java/io/grpc/internal/ServerImpl.java +++ b/core/src/main/java/io/grpc/internal/ServerImpl.java @@ -364,10 +364,10 @@ public final class ServerImpl extends io.grpc.Server { stream.close(Status.fromThrowable(e), new Metadata()); context.cancel(null); throw e; - } catch (Throwable t) { - stream.close(Status.fromThrowable(t), new Metadata()); + } catch (Error e) { + stream.close(Status.fromThrowable(e), new Metadata()); context.cancel(null); - throw new RuntimeException(t); + throw e; } finally { jumpListener.setListener(listener); } @@ -487,9 +487,9 @@ public final class ServerImpl extends io.grpc.Server { } catch (RuntimeException e) { internalClose(Status.fromThrowable(e), new Metadata()); throw e; - } catch (Throwable t) { - internalClose(Status.fromThrowable(t), new Metadata()); - throw new RuntimeException(t); + } catch (Error e) { + internalClose(Status.fromThrowable(e), new Metadata()); + throw e; } } }); @@ -505,9 +505,9 @@ public final class ServerImpl extends io.grpc.Server { } catch (RuntimeException e) { internalClose(Status.fromThrowable(e), new Metadata()); throw e; - } catch (Throwable t) { - internalClose(Status.fromThrowable(t), new Metadata()); - throw new RuntimeException(t); + } catch (Error e) { + internalClose(Status.fromThrowable(e), new Metadata()); + throw e; } } });