From bc983822e4e8bc72a7be1b15a22e3a361ef2118c Mon Sep 17 00:00:00 2001 From: Babneet Singh Date: Thu, 6 Feb 2025 09:55:14 -0500 Subject: [PATCH] Use a static synchronized method for allPermissionsPD Since allPermissionsPD is a static field, a static synchronized method locks on Class.class, which is the correct approach for ensuring thread safety. Fixes: #20351 Signed-off-by: Babneet Singh --- .../share/classes/java/lang/Class.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/jcl/src/java.base/share/classes/java/lang/Class.java b/jcl/src/java.base/share/classes/java/lang/Class.java index 8bfcd6a9c4f..ed197d53a23 100644 --- a/jcl/src/java.base/share/classes/java/lang/Class.java +++ b/jcl/src/java.base/share/classes/java/lang/Class.java @@ -2491,17 +2491,15 @@ ProtectionDomain getProtectionDomainInternal() { return allPermissionsPD; } -private void allocateAllPermissionsPD() { - /* 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); - } +/* Synchronization is added to ensure safe initialization and safe + * publication of allPermissionsPD. This addresses the locking contention + * on allPermissionsPD in getProtectionDomain(). + */ +private static synchronized void allocateAllPermissionsPD() { + if (allPermissionsPD == null) { + Permissions collection = new Permissions(); + collection.add(SecurityConstants.ALL_PERMISSION); + allPermissionsPD = new ProtectionDomain(null, collection); } }