You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2015/08/25 00:07:57 UTC
svn commit: r1697509 -
/felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
Author: pauls
Date: Mon Aug 24 22:07:57 2015
New Revision: 1697509
URL: http://svn.apache.org/r1697509
Log:
Create and shutdown ExecutorService in a doPriv with the resolver code AccessControlContext (FELIX-5011).
Modified:
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
Modified: felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java?rev=1697509&r1=1697508&r2=1697509&view=diff
==============================================================================
--- felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java (original)
+++ felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java Mon Aug 24 22:07:57 2015
@@ -18,6 +18,9 @@
*/
package org.apache.felix.resolver;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -56,6 +59,11 @@ import org.osgi.service.resolver.Resolve
public class ResolverImpl implements Resolver
{
+ private final AccessControlContext m_acc =
+ System.getSecurityManager() != null ?
+ AccessController.getContext() :
+ null;
+
private final Logger m_logger;
private final int m_parallelism;
@@ -134,14 +142,37 @@ public class ResolverImpl implements Res
}
else if (m_parallelism > 1)
{
- ExecutorService executor = Executors.newFixedThreadPool(m_parallelism);
+ final ExecutorService executor =
+ System.getSecurityManager() != null ?
+ AccessController.doPrivileged(
+ new PrivilegedAction<ExecutorService>()
+ {
+ public ExecutorService run()
+ {
+ return Executors.newFixedThreadPool(m_parallelism);
+ }
+ }, m_acc)
+ :
+ Executors.newFixedThreadPool(m_parallelism);
try
{
return resolve(rc, executor);
}
finally
{
- executor.shutdownNow();
+ if (System.getSecurityManager() != null)
+ {
+ AccessController.doPrivileged(new PrivilegedAction<Void>(){
+ public Void run() {
+ executor.shutdownNow();
+ return null;
+ }
+ }, m_acc);
+ }
+ else
+ {
+ executor.shutdownNow();
+ }
}
}
else