You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by la...@locus.apache.org on 2000/10/28 02:34:36 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util SimplePool.java
larryi 00/10/27 17:34:36
Modified: src/share/org/apache/tomcat/util SimplePool.java
Log:
Fix put method so idx can't become equal to max causing an
ArrayIndexOutOfBoundsException.
Update put and get so the code than reads and writes pool[] is synchronized
too. Otherwise a get at the wrong time could read the array before it is
written, and a put at the wrong time could overwrite the object before it is
read.
Revision Changes Path
1.5 +5 -5 jakarta-tomcat/src/share/org/apache/tomcat/util/SimplePool.java
Index: SimplePool.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/SimplePool.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SimplePool.java 2000/09/24 23:03:13 1.4
+++ SimplePool.java 2000/10/28 00:34:36 1.5
@@ -108,11 +108,11 @@
public void put(Object o) {
int idx=-1;
synchronized( lock ) {
- if( current < max )
+ if( current < max - 1 )
idx=++current;
+ if( idx > 0 )
+ pool[idx]=o;
}
- if( idx > 0 )
- pool[idx]=o;
}
/**
@@ -123,9 +123,9 @@
synchronized( lock ) {
if( current >= 0 )
idx=current--;
+ if( idx >= 0 )
+ return pool[idx];
}
- if( idx >= 0 )
- return pool[idx];
return null;
}