[jboss-cvs] Picketbox SVN: r72 - in trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins: authorization and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Apr 2 13:50:25 EDT 2010
Author: anil.saldhana at jboss.com
Date: 2010-04-02 13:50:25 -0400 (Fri, 02 Apr 2010)
New Revision: 72
Modified:
trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java
trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java
Log:
SECURITY-490: remove the lock in JBossAuthorizationManager authorize method and introduce a counter in JBossAuthorizatioNContext that takes care of number of authorizations in use and when the counter is 0, clears the modules and control flag lists
Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java 2010-04-01 21:33:23 UTC (rev 71)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java 2010-04-02 17:50:25 UTC (rev 72)
@@ -64,7 +64,7 @@
import org.jboss.security.mapping.MappingManager;
import org.jboss.security.mapping.MappingType;
import org.jboss.security.plugins.acl.JBossACLContext;
-import org.jboss.security.plugins.authorization.JBossAuthorizationContext;
+import org.jboss.security.plugins.authorization.JBossAuthorizationContext;
//$Id$
@@ -470,15 +470,7 @@
{
if(this.authorizationContext == null)
this.setAuthorizationContext( new JBossAuthorizationContext(this.securityDomain) );
- lock.lock();
- try
- {
- return this.authorizationContext.authorize(resource, subject, role);
- }
- finally
- {
- lock.unlock();
- }
+ return this.authorizationContext.authorize(resource, subject, role);
}
/**
Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java 2010-04-01 21:33:23 UTC (rev 71)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java 2010-04-02 17:50:25 UTC (rev 72)
@@ -24,6 +24,7 @@
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import java.util.List;
import java.util.Map;
import javax.security.auth.Subject;
@@ -136,6 +137,8 @@
{
try
{
+ //Increase the counter of authorizations in use
+ JBossAuthorizationContextManagement.increase();
this.authenticatedSubject = subject;
initializeModules(resource, callerRoles);
}
@@ -174,9 +177,8 @@
}
finally
{
- // clear the modules and control flags lists.
- super.modules.clear();
- super.controlFlags.clear();
+ //Decrease the counter of authorizations in use and if it reaches 0, clear the lists
+ JBossAuthorizationContextManagement.release(modules, controlFlags);
}
}
@@ -373,4 +375,40 @@
msg.append(e.getLocalizedMessage());
return msg.toString();
}
+
+ /**
+ * <p>An internal static class that maintains a counter of authorizations in action.</p>
+ * <p>Once the counter reaches 0, it is safe to clear the authorization modules and control flags,
+ * to avoid the memory leaks.</p>
+ * @author anil
+ */
+ private static class JBossAuthorizationContextManagement
+ {
+ private static Logger log = Logger.getLogger(JBossAuthorizationContextManagement.class);
+ private static boolean trace = log.isTraceEnabled();
+
+ private static int userCount = 0;
+
+ public synchronized static void increase()
+ {
+ if(trace)
+ log.trace("Increasing the count by 1.Count Will be:" + ( userCount + 1) );
+ userCount++;
+ }
+
+ @SuppressWarnings("unchecked")
+ public synchronized static void release(List modules, List controlFlags)
+ {
+ --userCount;
+ if(userCount == 0)
+ {
+ if(trace)
+ log.trace("Count is 0. Will be clearing the modules and control flags" );
+
+ // clear the modules and control flags lists.
+ modules.clear();
+ controlFlags.clear();
+ }
+ }
+ }
}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list