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]>