From 62c2c6b8561a00b2103fe5fb80b42b9975a5b8db Mon Sep 17 00:00:00 2001
From: Patrick Wendell <pwendell@gmail.com>
Date: Thu, 27 Jun 2013 21:47:22 -0700
Subject: [PATCH] Forcing Jetty to run as daemon

---
 core/src/main/scala/spark/ui/JettyUtils.scala | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/core/src/main/scala/spark/ui/JettyUtils.scala b/core/src/main/scala/spark/ui/JettyUtils.scala
index 5e20f41501..8cc50bc5b0 100644
--- a/core/src/main/scala/spark/ui/JettyUtils.scala
+++ b/core/src/main/scala/spark/ui/JettyUtils.scala
@@ -14,6 +14,7 @@ import scala.xml.Node
 
 import spark.{SparkContext, Logging}
 import org.eclipse.jetty.util.log.Log
+import org.eclipse.jetty.util.thread.QueuedThreadPool
 
 /** Utilities for launching a web server using Jetty's HTTP Server class */
 private[spark] object JettyUtils extends Logging {
@@ -93,9 +94,15 @@ private[spark] object JettyUtils extends Logging {
     @tailrec
     def connect(currentPort: Int): (Server, Int) = {
       val server = new Server(currentPort)
+      val pool = new QueuedThreadPool
+      pool.setDaemon(true)
+      server.setThreadPool(pool)
       server.setHandler(handlerList)
+
       Try { server.start() } match {
-        case s: Success[_] => (server, server.getConnectors.head.getLocalPort)
+        case s: Success[_] =>
+          sys.addShutdownHook(server.stop()) // Be kind, un-bind
+          (server, server.getConnectors.head.getLocalPort)
         case f: Failure[_] =>
           server.stop()
           logInfo("Failed to create UI at port, %s. Trying again.".format(currentPort))
@@ -103,6 +110,8 @@ private[spark] object JettyUtils extends Logging {
           connect((currentPort + 1) % 65536)
       }
     }
+
+
     connect(port)
   }
 }
-- 
GitLab