You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2017/04/24 18:10:17 UTC

svn commit: r1792524 - in /httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http: impl/nio/reactor/AbstractMultiworkerIOReactor.java nio/reactor/IOReactorException.java

Author: olegk
Date: Mon Apr 24 18:10:17 2017
New Revision: 1792524

URL: http://svn.apache.org/viewvc?rev=1792524&view=rev
Log:
HTTPCORE-455: fatal Error in an individual worker thread does not cause proper I/O reactor shutdown

Modified:
    httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
    httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java

Modified: httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java?rev=1792524&r1=1792523&r2=1792524&view=diff
==============================================================================
--- httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java (original)
+++ httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java Mon Apr 24 18:10:17 2017
@@ -351,7 +351,7 @@ public abstract class AbstractMultiworke
                 // Verify I/O dispatchers
                 for (int i = 0; i < this.workerCount; i++) {
                     final Worker worker = this.workers[i];
-                    final Exception ex = worker.getException();
+                    final Throwable ex = worker.getThrowable();
                     if (ex != null) {
                         throw new IOReactorException(
                                 "I/O dispatch worker terminated abnormally", ex);
@@ -574,7 +574,7 @@ public abstract class AbstractMultiworke
         final BaseIOReactor dispatcher;
         final IOEventDispatch eventDispatch;
 
-        private volatile Exception exception;
+        private volatile Throwable exception;
 
         public Worker(final BaseIOReactor dispatcher, final IOEventDispatch eventDispatch) {
             super();
@@ -586,12 +586,15 @@ public abstract class AbstractMultiworke
         public void run() {
             try {
                 this.dispatcher.execute(this.eventDispatch);
+            } catch (final Error ex) {
+                this.exception = ex;
+                throw ex;
             } catch (final Exception ex) {
                 this.exception = ex;
             }
         }
 
-        public Exception getException() {
+        public Throwable getThrowable() {
             return this.exception;
         }
 

Modified: httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java?rev=1792524&r1=1792523&r2=1792524&view=diff
==============================================================================
--- httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java (original)
+++ httpcomponents/httpcore/branches/4.4.x/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java Mon Apr 24 18:10:17 2017
@@ -46,6 +46,13 @@ public class IOReactorException extends
         }
     }
 
+    public IOReactorException(final String message, final Throwable cause) {
+        super(message);
+        if (cause != null) {
+            initCause(cause);
+        }
+    }
+
     public IOReactorException(final String message) {
         super(message);
     }