From 32d28ab85b2057d535cb992be33fe2b0da8253f1 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Thu, 6 Mar 2014 07:39:06 -0500 Subject: [PATCH] Override certain SecurityManager methods to avoid filesystem performance hit. --- run/src/main/scala/sbt/TrapExit.scala | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/run/src/main/scala/sbt/TrapExit.scala b/run/src/main/scala/sbt/TrapExit.scala index c61df5ab7..cf9eb87bd 100644 --- a/run/src/main/scala/sbt/TrapExit.scala +++ b/run/src/main/scala/sbt/TrapExit.scala @@ -413,6 +413,15 @@ private final class TrapExit(delegateManager: SecurityManager) extends SecurityM private def isRealExit(element: StackTraceElement): Boolean = element.getClassName == "java.lang.Runtime" && element.getMethodName == "exit" + // These are overridden to do nothing because there is a substantial filesystem performance penalty + // when there is a SecurityManager defined. The default implementations of these construct a + // FilePermission, and its initialization involves canonicalization, which is expensive. + override def checkRead(file: String) {} + override def checkRead(file: String, context: AnyRef) {} + override def checkWrite(file: String) {} + override def checkDelete(file: String) {} + override def checkExec(cmd: String) {} + override def checkPermission(perm: Permission) { if(delegateManager ne null)