Author: markt Date: Mon Dec 14 14:53:00 2009 New Revision: 890350 URL: http://svn.apache.org/viewvc?rev=890350&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47744 Prevent medium term memory leak when ussing SSL with a security manager Based on a patch by Greg Vanore
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java?rev=890350&r1=890349&r2=890350&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java Mon Dec 14 14:53:00 2009 @@ -23,6 +23,8 @@ import java.net.SocketException; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; +import java.util.Map; +import java.util.WeakHashMap; import javax.net.ssl.HandshakeCompletedEvent; import javax.net.ssl.HandshakeCompletedListener; @@ -53,6 +55,9 @@ private static final org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(JSSESupport.class); + + private static final Map<SSLSession,Integer> keySizeCache = + new WeakHashMap<SSLSession, Integer>(); protected SSLSocket ssl; protected SSLSession session; @@ -196,7 +201,12 @@ SSLSupport.CipherData c_aux[]=ciphers; if (session == null) return null; - Integer keySize = (Integer) session.getValue(KEY_SIZE_KEY); + + Integer keySize = null; + synchronized(keySizeCache) { + keySize = keySizeCache.get(session); + } + if (keySize == null) { int size = 0; String cipherSuite = session.getCipherSuite(); @@ -207,7 +217,9 @@ } } keySize = new Integer(size); - session.putValue(KEY_SIZE_KEY, keySize); + synchronized(keySizeCache) { + keySizeCache.put(session, keySize); + } } return keySize; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org