提交 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -40,7 +40,6 @@ import javax.security.auth.x500.X500Principal; ...@@ -40,7 +40,6 @@ import javax.security.auth.x500.X500Principal;
import java.io.FilePermission; import java.io.FilePermission;
import java.net.SocketPermission; import java.net.SocketPermission;
import java.net.NetPermission; import java.net.NetPermission;
import java.util.concurrent.atomic.AtomicReference;
import sun.misc.JavaSecurityProtectionDomainAccess; import sun.misc.JavaSecurityProtectionDomainAccess;
import static sun.misc.JavaSecurityProtectionDomainAccess.ProtectionDomainCache; import static sun.misc.JavaSecurityProtectionDomainAccess.ProtectionDomainCache;
import sun.misc.SharedSecrets; import sun.misc.SharedSecrets;
...@@ -274,7 +273,8 @@ public class PolicyFile extends java.security.Policy { ...@@ -274,7 +273,8 @@ public class PolicyFile extends java.security.Policy {
private static final int DEFAULT_CACHE_SIZE = 1; private static final int DEFAULT_CACHE_SIZE = 1;
// contains the policy grant entries, PD cache, and alias mapping // 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 constructed = false;
private boolean expandProperties = true; private boolean expandProperties = true;
...@@ -437,7 +437,7 @@ public class PolicyFile extends java.security.Policy { ...@@ -437,7 +437,7 @@ public class PolicyFile extends java.security.Policy {
// System.out.println("number caches=" + numCaches); // System.out.println("number caches=" + numCaches);
PolicyInfo newInfo = new PolicyInfo(numCaches); PolicyInfo newInfo = new PolicyInfo(numCaches);
initPolicyFile(newInfo, url); initPolicyFile(newInfo, url);
policyInfo.set(newInfo); policyInfo = newInfo;
} }
private void initPolicyFile(final PolicyInfo newInfo, final URL url) { private void initPolicyFile(final PolicyInfo newInfo, final URL url) {
...@@ -1074,9 +1074,7 @@ public class PolicyFile extends java.security.Policy { ...@@ -1074,9 +1074,7 @@ public class PolicyFile extends java.security.Policy {
*/ */
@Override @Override
public boolean implies(ProtectionDomain pd, Permission p) { public boolean implies(ProtectionDomain pd, Permission p) {
PolicyInfo pi = policyInfo.get(); ProtectionDomainCache pdMap = policyInfo.getPdMapping();
ProtectionDomainCache pdMap = pi.getPdMapping();
PermissionCollection pc = pdMap.get(pd); PermissionCollection pc = pdMap.get(pd);
if (pc != null) { if (pc != null) {
...@@ -1222,7 +1220,7 @@ public class PolicyFile extends java.security.Policy { ...@@ -1222,7 +1220,7 @@ public class PolicyFile extends java.security.Policy {
private Permissions getPermissions(Permissions perms, private Permissions getPermissions(Permissions perms,
final CodeSource cs, final CodeSource cs,
Principal[] principals) { Principal[] principals) {
PolicyInfo pi = policyInfo.get(); PolicyInfo pi = policyInfo;
for (PolicyEntry entry : pi.policyEntries) { for (PolicyEntry entry : pi.policyEntries) {
addPermissions(perms, cs, principals, entry); addPermissions(perms, cs, principals, entry);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册