From 330e520c1d42d3a9f3e187873dcd8ed7fd561aaf Mon Sep 17 00:00:00 2001 From: Fernando Guallini Date: Thu, 18 Jul 2024 22:36:26 +0000 Subject: [PATCH] 8028127: Regtest java/security/Security/SynchronizedAccess.java is incorrect Reviewed-by: wetmore, mdonovan, rhalade --- .../security/Security/SynchronizedAccess.java | 131 +++++++++++++----- 1 file changed, 93 insertions(+), 38 deletions(-) diff --git a/test/jdk/java/security/Security/SynchronizedAccess.java b/test/jdk/java/security/Security/SynchronizedAccess.java index 4e244a291e3..28019213b3c 100644 --- a/test/jdk/java/security/Security/SynchronizedAccess.java +++ b/test/jdk/java/security/Security/SynchronizedAccess.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, 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 @@ -23,13 +23,15 @@ /* * @test - * @bug 4162583 7054918 8130181 - * @library ../testlibrary + * @bug 4162583 7054918 8130181 8028127 + * @library /test/lib ../testlibrary * @summary Make sure Provider api implementations are synchronized properly */ import java.security.*; +import jdk.test.lib.Asserts; + public class SynchronizedAccess { public static void main(String[] args) throws Exception { @@ -42,52 +44,105 @@ public class SynchronizedAccess { } public static void main0(String[] args) throws Exception { + var providersCountBefore = Security.getProviders().length; AccessorThread[] acc = new AccessorThread[200]; - for (int i=0; i < acc.length; i++) - acc[i] = new AccessorThread("thread"+i); - for (int i=0; i < acc.length; i++) + for (int i = 0; i < acc.length; i++) { + acc[i] = new AccessorThread("thread" + i); + } + for (int i = 0; i < acc.length; i++) { acc[i].start(); - for (int i=0; i < acc.length; i++) + } + for (int i = 0; i < acc.length; i++) { acc[i].join(); - } -} - -class AccessorThread extends Thread { - - public AccessorThread(String str) { - super(str); + } + var providersCountAfter = Security.getProviders().length; + Asserts.assertEquals(providersCountBefore, providersCountAfter); } - public void run() { - Provider[] provs = new Provider[10]; - for (int i=0; i < provs.length; i++) - provs[i] = new MyProvider("name"+i, "1", "test"); + static class AccessorThread extends Thread { - int rounds = 20; - while (rounds-- > 0) { - try { - for (int i=0; i 0) { + for (int i = 0; i < provs.length; i++) { + // Might install (>=0) or not (-1) if already installed Security.addProvider(provs[i]); + Thread.yield(); } - Signature sig = Signature.getInstance("sigalg"); - for (int i=0; i