You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by gl...@apache.org on 2003/09/26 14:45:13 UTC

cvs commit: jakarta-commons/dbcp/src/java/org/apache/commons/dbcp AbandonedObjectPool.java

glenn       2003/09/26 05:45:13

  Modified:    dbcp/src/java/org/apache/commons/dbcp
                        AbandonedObjectPool.java
  Log:
  Fix some potential synchronization problems
  
  Revision  Changes    Path
  1.10      +20 -15    jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/AbandonedObjectPool.java
  
  Index: AbandonedObjectPool.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/AbandonedObjectPool.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- AbandonedObjectPool.java	23 Sep 2003 13:29:30 -0000	1.9
  +++ AbandonedObjectPool.java	26 Sep 2003 12:45:13 -0000	1.10
  @@ -152,9 +152,11 @@
           super.returnObject(obj);
       }
   
  -    public synchronized void invalidateObject(Object obj) throws Exception {
  +    public void invalidateObject(Object obj) throws Exception {
           if (config != null && config.getRemoveAbandoned()) {
  -            trace.remove(obj);
  +            synchronized(trace) {
  +                trace.remove(obj);
  +            }
           }
           super.invalidateObject(obj);        
       }
  @@ -163,23 +165,26 @@
        * Recover abandoned db connections which have been idle
        * greater than the removeAbandonedTimeout.
        */
  -    private synchronized void removeAbandoned() {
  +    private void removeAbandoned() {
           // Generate a list of abandoned connections to remove
           long now = System.currentTimeMillis();
           long timeout = now - (config.getRemoveAbandonedTimeout() * 1000);
           ArrayList remove = new ArrayList();
  -        Iterator it = trace.iterator();
  -        while (it.hasNext()) {
  -            PoolableConnection pc = (PoolableConnection)it.next();
  -            if (pc.getLastUsed() > timeout) {
  -                continue;
  -            }
  -            if (pc.getLastUsed() > 0) {
  -                remove.add(pc);
  +        synchronized(trace) {
  +            Iterator it = trace.iterator();
  +            while (it.hasNext()) {
  +                PoolableConnection pc = (PoolableConnection)it.next();
  +                if (pc.getLastUsed() > timeout) {
  +                    continue;
  +                }
  +                if (pc.getLastUsed() > 0) {
  +                    remove.add(pc);
  +                }
               }
           }
  +
           // Now remove the abandoned connections
  -        it = remove.iterator();
  +        Iterator it = remove.iterator();
           while (it.hasNext()) {
               PoolableConnection pc = (PoolableConnection)it.next();
               if (config.getLogAbandoned()) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org