Skip to content

Commit

Permalink
[XNIO-261] Use privileged action to construct service loaders
Browse files Browse the repository at this point in the history
  • Loading branch information
dmlloyd committed Feb 2, 2016
1 parent ee2dcdb commit be56b35
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions api/src/main/java/org/xnio/Xnio.java
Expand Up @@ -178,8 +178,12 @@ public static void checkBlockingAllowed() throws IllegalStateException {
*
* @since 3.0
*/
public static Xnio getInstance(ClassLoader classLoader) {
return doGetInstance(null, ServiceLoader.load(XnioProvider.class, classLoader));
public static Xnio getInstance(final ClassLoader classLoader) {
return doGetInstance(null, doPrivileged(new PrivilegedAction<ServiceLoader<XnioProvider>>() {
public ServiceLoader<XnioProvider> run() {
return ServiceLoader.load(XnioProvider.class, classLoader);
}
}));
}

/**
Expand All @@ -191,7 +195,11 @@ public static Xnio getInstance(ClassLoader classLoader) {
* @since 3.0
*/
public static Xnio getInstance() {
return doGetInstance(null, ServiceLoader.load(XnioProvider.class, Xnio.class.getClassLoader()));
return doGetInstance(null, doPrivileged(new PrivilegedAction<ServiceLoader<XnioProvider>>() {
public ServiceLoader<XnioProvider> run() {
return ServiceLoader.load(XnioProvider.class, Xnio.class.getClassLoader());
}
}));
}

/**
Expand All @@ -203,8 +211,12 @@ public static Xnio getInstance() {
*
* @since 3.0
*/
public static Xnio getInstance(String provider, ClassLoader classLoader) {
return doGetInstance(provider, ServiceLoader.load(XnioProvider.class, classLoader));
public static Xnio getInstance(String provider, final ClassLoader classLoader) {
return doGetInstance(provider, doPrivileged(new PrivilegedAction<ServiceLoader<XnioProvider>>() {
public ServiceLoader<XnioProvider> run() {
return ServiceLoader.load(XnioProvider.class, classLoader);
}
}));
}

/**
Expand All @@ -216,7 +228,11 @@ public static Xnio getInstance(String provider, ClassLoader classLoader) {
* @since 3.0
*/
public static Xnio getInstance(String provider) {
return doGetInstance(provider, ServiceLoader.load(XnioProvider.class, Xnio.class.getClassLoader()));
return doGetInstance(provider, doPrivileged(new PrivilegedAction<ServiceLoader<XnioProvider>>() {
public ServiceLoader<XnioProvider> run() {
return ServiceLoader.load(XnioProvider.class, Xnio.class.getClassLoader());
}
}));
}

private static Xnio doGetInstance(final String provider, final ServiceLoader<XnioProvider> serviceLoader) {
Expand Down

0 comments on commit be56b35

Please sign in to comment.