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/03/06 20:40:49 UTC
svn commit: r515269 -
/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
Author: olegk
Date: Tue Mar 6 11:40:48 2007
New Revision: 515269
URL: http://svn.apache.org/viewvc?view=rev&rev=515269
Log:
HTTPCORE-54: Fixed NPE in AbstractMultiworkerIOReactor#stopWorkers(). AbstractMultiworkerIOReactor can now be shut down even if partially initialized
Modified:
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
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=515269&r1=515268&r2=515269
==============================================================================
--- 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 Tue Mar 6 11:40:48 2007
@@ -45,6 +45,8 @@
private final BaseIOReactor[] ioReactors;
private final Worker[] workers;
private final Thread[] threads;
+
+ private volatile boolean shutdown;
private int currentWorker = 0;
@@ -77,18 +79,31 @@
this.threads[i] = this.threadFactory.newThread(this.workers[i]);
}
for (int i = 0; i < this.workerCount; i++) {
+ if (this.shutdown) {
+ return;
+ }
this.threads[i].start();
}
}
protected void stopWorkers(int millis)
throws InterruptedIOException, IOReactorException {
+ if (this.shutdown) {
+ return;
+ }
+ this.shutdown = true;
for (int i = 0; i < this.workerCount; i++) {
- this.ioReactors[i].shutdown();
+ BaseIOReactor reactor = this.ioReactors[i];
+ if (reactor != null) {
+ reactor.shutdown();
+ }
}
for (int i = 0; i < this.workerCount; i++) {
try {
- this.threads[i].join(millis);
+ Thread t = this.threads[i];
+ if (t != null) {
+ t.join(millis);
+ }
} catch (InterruptedException ex) {
throw new InterruptedIOException(ex.getMessage());
}
@@ -97,6 +112,9 @@
protected void verifyWorkers()
throws InterruptedIOException, IOReactorException {
+ if (this.shutdown) {
+ return;
+ }
for (int i = 0; i < this.workerCount; i++) {
Worker worker = this.workers[i];
Thread thread = this.threads[i];
@@ -160,8 +178,10 @@
static class DefaultThreadFactory implements ThreadFactory {
+ private static int COUNT = 0;
+
public Thread newThread(final Runnable r) {
- return new Thread(r, "I/O reactor worker thread");
+ return new Thread(r, "I/O reactor worker thread " + (++COUNT));
}
}