changeset 1808:e32be26dcc8c

8192789: Avoid using AtomicReference in sun.security.provider.PolicyFile Reviewed-by: mullan, ahgross
author igerasim
date Tue, 12 Dec 2017 23:34:13 -0800
parents 96a0ed531b5e
children 4bf938177d47
files src/share/classes/sun/security/provider/PolicyFile.java
diffstat 1 files changed, 6 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/sun/security/provider/PolicyFile.java	Tue Feb 06 09:04:46 2018 -0800
+++ b/src/share/classes/sun/security/provider/PolicyFile.java	Tue Dec 12 23:34:13 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,7 +47,6 @@
 import java.net.SocketPermission;
 import java.net.NetPermission;
 import java.util.PropertyPermission;
-import java.util.concurrent.atomic.AtomicReference;
 import java.awt.AWTPermission;
 /*
 import javax.security.auth.AuthPermission;
@@ -296,8 +295,8 @@
     private static IdentityScope scope = null;
 
     // contains the policy grant entries, PD cache, and alias mapping
-    private AtomicReference<PolicyInfo> policyInfo =
-        new AtomicReference<PolicyInfo>();
+    // can be updated if refresh() is called
+    private volatile PolicyInfo policyInfo;
     private boolean constructed = false;
 
     private boolean expandProperties = true;
@@ -460,7 +459,7 @@
         // System.out.println("number caches=" + numCaches);
         PolicyInfo newInfo = new PolicyInfo(numCaches);
         initPolicyFile(newInfo, url);
-        policyInfo.set(newInfo);
+        policyInfo = newInfo;
     }
 
     private void initPolicyFile(final PolicyInfo newInfo, final URL url) {
@@ -1123,9 +1122,7 @@
      */
     @Override
     public boolean implies(ProtectionDomain pd, Permission p) {
-        PolicyInfo pi = policyInfo.get();
-        ProtectionDomainCache pdMap = pi.getPdMapping();
-
+        ProtectionDomainCache pdMap = policyInfo.getPdMapping();
         PermissionCollection pc = pdMap.get(pd);
 
         if (pc != null) {
@@ -1268,7 +1265,7 @@
     private Permissions getPermissions(Permissions perms,
                                        final CodeSource cs,
                                        Principal[] principals) {
-        PolicyInfo pi = policyInfo.get();
+        PolicyInfo pi = policyInfo;
 
         for (PolicyEntry entry : pi.policyEntries) {
             addPermissions(perms, cs, principals, entry);