--- ExpressionEvaluatorManager.java.orig 2004-04-08 03:42:02.000000000 -0500 +++ ExpressionEvaluatorManager.java.orig 2004-04-08 08:58:40.302582400 -0500 @@ -99,20 +99,22 @@ * Gets an ExpressionEvaluator from the cache, or seeds the cache * if we haven't seen a particular ExpressionEvaluator before. */ - public static synchronized - ExpressionEvaluator getEvaluatorByName(String name) - throws JspException { + public static ExpressionEvaluator getEvaluatorByName(String name) throws JspException + { + Object oEvaluator = nameMap.get(name); + if (oEvaluator != null) + return ((ExpressionEvaluator) oEvaluator); try { - - Object oEvaluator = nameMap.get(name); - if (oEvaluator == null) { - ExpressionEvaluator e = (ExpressionEvaluator) - Class.forName(name).newInstance(); - nameMap.put(name, e); - return (e); - } else + synchronized (nameMap) + { + oEvaluator = nameMap.get(name); + if (oEvaluator != null) + return ((ExpressionEvaluator) oEvaluator); + ExpressionEvaluator e = (ExpressionEvaluator) Class.forName(name).newInstance(); + nameMap.put(name, e); + oEvaluator = e; + } return ((ExpressionEvaluator) oEvaluator); - } catch (ClassCastException ex) { // just to display a better error message throw new JspException("invalid ExpressionEvaluator: " +