8022119: test api/javax_sound/sampled/spi/MixerProvider/indexTGF_MixerProviderTests fails
Reviewed-by: art, anthony
diff --git a/src/share/classes/com/sun/media/sound/JSSecurityManager.java b/src/share/classes/com/sun/media/sound/JSSecurityManager.java
index 280e92a..ef34bc4 100644
--- a/src/share/classes/com/sun/media/sound/JSSecurityManager.java
+++ b/src/share/classes/com/sun/media/sound/JSSecurityManager.java
@@ -187,9 +187,18 @@
static <T> List<T> getProviders(final Class<T> providerClass) {
List<T> p = new ArrayList<>();
- // ServiceLoader creates "lazy" iterator instance, so it doesn't,
- // require do be called from privileged section
- final Iterator<T> ps = ServiceLoader.load(providerClass).iterator();
+ // ServiceLoader creates "lazy" iterator instance, but it ensures that
+ // next/hasNext run with permissions that are restricted by whatever
+ // creates the ServiceLoader instance, so it requires to be called from
+ // privileged section
+ final PrivilegedAction<Iterator<T>> psAction =
+ new PrivilegedAction<Iterator<T>>() {
+ @Override
+ public Iterator<T> run() {
+ return ServiceLoader.load(providerClass).iterator();
+ }
+ };
+ final Iterator<T> ps = AccessController.doPrivileged(psAction);
// the iterator's hasNext() method looks through classpath for
// the provider class names, so it requires read permissions