[jboss-cvs] JBossAS SVN: r103483 - in projects/security/security-jboss-sx/branches/Branch_2_0/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:53:30 EDT 2010
Author: anil.saldhana at jboss.com
Date: 2010-04-02 13:53:29 -0400 (Fri, 02 Apr 2010)
New Revision: 103483
Modified:
projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java
projects/security/security-jboss-sx/branches/Branch_2_0/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: projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java
===================================================================
--- projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java 2010-04-02 15:56:13 UTC (rev 103482)
+++ projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java 2010-04-02 17:53:29 UTC (rev 103483)
@@ -471,15 +471,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: projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java
===================================================================
--- projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java 2010-04-02 15:56:13 UTC (rev 103482)
+++ projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java 2010-04-02 17:53:29 UTC (rev 103483)
@@ -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