diff --git a/src/share/classes/sun/security/provider/PolicyFile.java b/src/share/classes/sun/security/provider/PolicyFile.java index c6ef955cf92adedafafd4721a35724ff500353cd..9ff02c51e7a672e6f30dc2da3664e236ed776eb0 100644 --- a/src/share/classes/sun/security/provider/PolicyFile.java +++ b/src/share/classes/sun/security/provider/PolicyFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, 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 @@ -40,7 +40,6 @@ import javax.security.auth.x500.X500Principal; import java.io.FilePermission; import java.net.SocketPermission; import java.net.NetPermission; -import java.util.concurrent.atomic.AtomicReference; import sun.misc.JavaSecurityProtectionDomainAccess; import static sun.misc.JavaSecurityProtectionDomainAccess.ProtectionDomainCache; import sun.misc.SharedSecrets; @@ -274,7 +273,8 @@ public class PolicyFile extends java.security.Policy { private static final int DEFAULT_CACHE_SIZE = 1; // contains the policy grant entries, PD cache, and alias mapping - private AtomicReference policyInfo = new AtomicReference<>(); + // can be updated if refresh() is called + private volatile PolicyInfo policyInfo; private boolean constructed = false; private boolean expandProperties = true; @@ -437,7 +437,7 @@ public class PolicyFile extends java.security.Policy { // 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) { @@ -1074,9 +1074,7 @@ public class PolicyFile extends java.security.Policy { */ @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) { @@ -1222,7 +1220,7 @@ public class PolicyFile extends java.security.Policy { 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);