Skip to content

Commit

Permalink
Merge pull request #21073 from babsingh/main13
Browse files Browse the repository at this point in the history
Add synchronization for Class.allPermissionsPD
  • Loading branch information
pshipton authored Feb 6, 2025
2 parents 2e9fc90 + f952f8d commit f6f1da0
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions jcl/src/java.base/share/classes/java/lang/Class.java
Original file line number Diff line number Diff line change
Expand Up @@ -160,12 +160,13 @@ public final class Class<T> implements java.io.Serializable, GenericDeclaration,
/*[ENDIF] JAVA_SPEC_VERSION >= 12 */
{
private static final long serialVersionUID = 3206093459760846163L;
private static ProtectionDomain AllPermissionsPD;
private static final int SYNTHETIC = 0x1000;
private static final int ANNOTATION = 0x2000;
private static final int ENUM = 0x4000;
private static final int MEMBER_INVALID_TYPE = -1;

private static volatile ProtectionDomain allPermissionsPD;

/*[IF]*/
/**
* It is important that these remain static final
Expand Down Expand Up @@ -2484,16 +2485,24 @@ ProtectionDomain getProtectionDomainInternal() {
if (result != null) {
return result;
}
if (AllPermissionsPD == null) {
if (allPermissionsPD == null) {
allocateAllPermissionsPD();
}
return AllPermissionsPD;
return allPermissionsPD;
}

private void allocateAllPermissionsPD() {
Permissions collection = new Permissions();
collection.add(SecurityConstants.ALL_PERMISSION);
AllPermissionsPD = new ProtectionDomain(null, collection);
/* Synchronization to ensure safe initialization and safe publication of
* allPermissionsPD. This addresses the locking contention on allPermissionsPD
* in getProtectionDomain().
*/
synchronized(this) {
if (allPermissionsPD == null) {
Permissions collection = new Permissions();
collection.add(SecurityConstants.ALL_PERMISSION);
allPermissionsPD = new ProtectionDomain(null, collection);
}
}
}

/**
Expand Down

0 comments on commit f6f1da0

Please sign in to comment.