提交 c08377d2 编写于 作者: I igerasim

8192789: Avoid using AtomicReference in sun.security.provider.PolicyFile

Reviewed-by: mullan, ahgross
上级 c98980d5
/*
* 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> 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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册