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 2007/06/24 14:12:35 UTC

svn commit: r550217 - in /jakarta/httpcomponents/httpcore/trunk: RELEASE_NOTES.txt module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java module-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java

Author: olegk
Date: Sun Jun 24 05:12:34 2007
New Revision: 550217

URL: http://svn.apache.org/viewvc?view=rev&rev=550217
Log:
HTTPCORE-87: RuntimeExcpetions thrown in I/O worker threads are now correctly propagated to the I/O reactor

Modified:
    jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java

Modified: jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt?view=diff&rev=550217&r1=550216&r2=550217
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt (original)
+++ jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt Sun Jun 24 05:12:34 2007
@@ -1,5 +1,9 @@
 Changes since 4.0 Alpha 4
 
+* [HTTPCORE-87] RuntimeExcpetions thrown in I/O worker threads are now correctly 
+  propagated to the I/O reactor.
+  Contributed by Oleg Kalnichevski <olegk at apache.org>
+
 * [HTTPCORE-84]: Removed DateUtils/DateParseException from core.
   Contributed by Roland Weber <rolandw at apache.org>
 

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java?view=diff&rev=550217&r1=550216&r2=550217
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java Sun Jun 24 05:12:34 2007
@@ -125,11 +125,15 @@
             Worker worker = this.workers[i];
             Thread thread = this.threads[i];
             if (!thread.isAlive()) {
-                if (worker.getReactorException() != null) {
-                    throw worker.getReactorException();
-                }
-                if (worker.getInterruptedException() != null) {
-                    throw worker.getInterruptedException();
+                Exception ex = worker.getException();
+                if (ex instanceof IOReactorException) {
+                    throw (IOReactorException) ex;
+                } else if (ex instanceof InterruptedIOException) {
+                    throw (InterruptedIOException) ex;
+                } else if (ex instanceof RuntimeException) {
+                    throw (RuntimeException) ex;
+                } else {
+                    throw new IOReactorException(ex.getMessage(), ex);
                 }
             }
         }
@@ -145,8 +149,7 @@
         final BaseIOReactor ioReactor;
         final IOEventDispatch eventDispatch;
         
-        private volatile IOReactorException reactorException;
-        private volatile InterruptedIOException interruptedException;
+        private volatile Exception exception;
         
         public Worker(final BaseIOReactor ioReactor, final IOEventDispatch eventDispatch) {
             super();
@@ -158,28 +161,26 @@
             try {
                 this.ioReactor.execute(this.eventDispatch);
             } catch (InterruptedIOException ex) {
-                this.interruptedException = ex;
+                this.exception = ex;
             } catch (IOReactorException ex) {
-                this.reactorException = ex;
+                this.exception = ex;
+            } catch (RuntimeException ex) {
+                this.exception = ex;
             } finally {
                 try {
                     this.ioReactor.shutdown();
                 } catch (IOReactorException ex2) {
-                    if (this.reactorException == null) {
-                        this.reactorException = ex2;
+                    if (this.exception == null) {
+                        this.exception = ex2;
                     }
                 }
             }
         }
         
-        public IOReactorException getReactorException() {
-            return this.reactorException;
+        public Exception getException() {
+            return this.exception;
         }
 
-        public InterruptedIOException getInterruptedException() {
-            return this.interruptedException;
-        }
-        
     }
 
     static class DefaultThreadFactory implements ThreadFactory {

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java?view=diff&rev=550217&r1=550216&r2=550217
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/reactor/IOReactorException.java Sun Jun 24 05:12:34 2007
@@ -41,7 +41,7 @@
 
     private static final long serialVersionUID = 6986850002663481135L;
 
-    public IOReactorException(final String message, final IOException cause) {
+    public IOReactorException(final String message, final Exception cause) {
         super(message);
         if (cause != null) {
             initCause(cause);