dlr         01/11/14 16:16:18

  Modified:    src/java/org/apache/torque Torque.java
  Log:
  Two patches:
  
  o Peter Donald <[EMAIL PROTECTED]> removed the use of non-functional
  double-checked locking in getDatabaseMap(String).
  
  o I made initDatabaseMap(String) more robust by copying the existing
  HashMap dbMaps to avoid possible CMEs.
  
  Revision  Changes    Path
  1.40      +13 -15    jakarta-turbine-torque/src/java/org/apache/torque/Torque.java
  
  Index: Torque.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/Torque.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -u -r1.39 -r1.40
  --- Torque.java       2001/11/13 01:10:27     1.39
  +++ Torque.java       2001/11/15 00:16:17     1.40
  @@ -81,7 +81,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Magn�s ��r Torfason</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Jason van Zyl</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Rafal Krzewski</a>
  - * @version $Id: Torque.java,v 1.39 2001/11/13 01:10:27 jmcnally Exp $
  + * @version $Id: Torque.java,v 1.40 2001/11/15 00:16:17 dlr Exp $
    */
   public class Torque
   {
  @@ -401,23 +401,16 @@
               }
           }
   
  -        // Quick (non-sync) check for the map we want.
  -        DatabaseMap map = (DatabaseMap) dbMaps.get(name);
  -        if (map == null)
  +        synchronized (dbMaps)
           {
  -            // Map not there...
  -            synchronized (dbMaps)
  +            DatabaseMap map = (DatabaseMap) dbMaps.get(name);
  +            if (map == null)
               {
  -                // ... sync and look again to avoid race condition.
  -                map = (DatabaseMap) dbMaps.get(name);
  -                if (map == null)
  -                {
  -                    // Still not there.  Create and add.
  -                    map = initDatabaseMap(name);
  -                }
  +                // Still not there.  Create and add.
  +                map = initDatabaseMap(name);
               }
  +            return map;
           }
  -        return map;
       }
   
       /**
  @@ -450,7 +443,12 @@
           {
               throw new TorqueException(e);
           }
  -        dbMaps.put(name, map);
  +
  +        // Avoid possible ConcurrentModificationException by
  +        // constructing a copy of dbMaps.
  +        Map newMaps = new HashMap(dbMaps);
  +        newMaps.put(name, map);
  +        dbMaps = newMaps;
   
           return map;
       }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to