billbarker 2003/09/10 21:15:42
Modified: util/java/org/apache/tomcat/util/threads Tag: coyote_10
ThreadPool.java
Log:
port patch
Revision Changes Path
No revision
No revision
1.9.2.2 +34 -24
jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/threads/ThreadPool.java
Index: ThreadPool.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/threads/ThreadPool.java,v
retrieving revision 1.9.2.1
retrieving revision 1.9.2.2
diff -u -r1.9.2.1 -r1.9.2.2
--- ThreadPool.java 25 Jan 2003 04:49:24 -0000 1.9.2.1
+++ ThreadPool.java 11 Sep 2003 04:15:42 -0000 1.9.2.2
@@ -276,7 +276,7 @@
throw new NullPointerException();
}
- if(0 == currentThreadCount || stopThePool) {
+ if( stopThePool ) {
throw new IllegalStateException();
}
@@ -284,39 +284,46 @@
// Obtain a free thread from the pool.
synchronized(this) {
- if(currentThreadsBusy == currentThreadCount) {
+ while (currentThreadsBusy == currentThreadCount) {
// All threads are busy
- if(currentThreadCount < maxThreads) {
+ if (currentThreadCount < maxThreads) {
// Not all threads were open,
// Open new threads up to the max number of idel threads
int toOpen = currentThreadCount + minSpareThreads;
openThreads(toOpen);
} else {
- logFull(log, currentThreadCount, maxThreads);
+ logFull(log, currentThreadCount, maxThreads);
// Wait for a thread to become idel.
- while(currentThreadsBusy == currentThreadCount) {
- try {
- this.wait();
- }
- // was just catch Throwable -- but no other
- // exceptions can be thrown by wait, right?
- // So we catch and ignore this one, since
- // it'll never actually happen, since nowhere
- // do we say pool.interrupt().
- catch(InterruptedException e) {
- log.error("Unexpected exception", e);
- }
-
- // Pool was stopped. Get away of the pool.
- if(0 == currentThreadCount || stopThePool) {
- throw new IllegalStateException();
- }
+ try {
+ this.wait();
+ }
+ // was just catch Throwable -- but no other
+ // exceptions can be thrown by wait, right?
+ // So we catch and ignore this one, since
+ // it'll never actually happen, since nowhere
+ // do we say pool.interrupt().
+ catch(InterruptedException e) {
+ log.error("Unexpected exception", e);
+ }
+ if( log.isDebugEnabled() ) {
+ log.debug("Finished waiting: CTC="+currentThreadCount +
+ ", CTB=" + currentThreadsBusy);
+ }
+ // Pool was stopped. Get away of the pool.
+ if( stopThePool) {
+ break;
}
}
}
-
+ // Pool was stopped. Get away of the pool.
+ if(0 == currentThreadCount || stopThePool) {
+ throw new IllegalStateException();
+ }
+
// If we are here it means that there is a free thread. Take it.
- c = pool[currentThreadCount - currentThreadsBusy - 1];
+ int pos = currentThreadCount - currentThreadsBusy - 1;
+ c = pool[pos];
+ pool[pos] = null;
currentThreadsBusy++;
}
c.runIt(r);
@@ -330,7 +337,10 @@
" status" + currentThreadCount + " " +
maxThreads );
logfull=false;
- }
+ } else if( log.isDebugEnabled() ) {
+ log.debug("All threads are busy " + currentThreadCount + " " +
+ maxThreads );
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]