You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/12/28 23:32:39 UTC
svn commit: r1053473 - in
/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell:
ConsoleShell.scala InterruptibleInputStream.scala Shell.scala
Author: reto
Date: Tue Dec 28 22:32:39 2010
New Revision: 1053473
URL: http://svn.apache.org/viewvc?rev=1053473&view=rev
Log:
CLEREZZA-353: no longer waiting for the next character of system.in when the shell is terminated
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ConsoleShell.scala
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/InterruptibleInputStream.scala
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ConsoleShell.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ConsoleShell.scala?rev=1053473&r1=1053472&r2=1053473&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ConsoleShell.scala (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ConsoleShell.scala Tue Dec 28 22:32:39 2010
@@ -22,7 +22,10 @@ package org.apache.clerezza.shell;
import org.osgi.framework.BundleContext
import org.osgi.service.component.ComponentContext;
+import java.nio.channels.Channels
import org.osgi.framework.Bundle
+import java.io.FileDescriptor
+import java.io.FileInputStream
import java.net._
import scala.tools.nsc._;
import scala.tools.nsc.interpreter._;
@@ -49,7 +52,9 @@ class ConsoleShell() {
bundle.stop()
stoppedBundle = Some(bundle)
}
- interruptibleIn = new InterruptibleInputStream(System.in)
+ val in = Channels.newInputStream(
+ (new FileInputStream(FileDescriptor.in)).getChannel());
+ interruptibleIn = new InterruptibleInputStream(in)
val shell = factory.createShell(interruptibleIn, System.out)
shell.start()
shellOption = Some(shell)
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/InterruptibleInputStream.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/InterruptibleInputStream.scala?rev=1053473&r1=1053472&r2=1053473&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/InterruptibleInputStream.scala (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/InterruptibleInputStream.scala Tue Dec 28 22:32:39 2010
@@ -19,6 +19,7 @@
package org.apache.clerezza.shell
import java.io.InputStream
+import java.nio.channels.ClosedByInterruptException
import scala.actors.Actor
import scala.actors.Actor._
@@ -26,7 +27,7 @@ class InterruptibleInputStream(base: Inp
private case object Stop
private case object Read
- private var lastReader: Actor = null
+ private var readingThread: Thread = null
val readerActor = new Actor() {
def act() {
@@ -34,8 +35,16 @@ class InterruptibleInputStream(base: Inp
react {
case Stop => exit()
case Read => {
- val ch = base.read()
- lastReader ! ch
+ readingThread = Thread.currentThread
+ val ch = try {
+ base.read()
+ } catch {
+ case e: ClosedByInterruptException => {
+ -1
+ }
+ }
+ readingThread = null
+ sender ! ch
}
}
}
@@ -44,7 +53,6 @@ class InterruptibleInputStream(base: Inp
readerActor.start()
def read() = {
- lastReader = self
readerActor ! Read
self.receive {
case x: Int => x
@@ -53,8 +61,9 @@ class InterruptibleInputStream(base: Inp
def terminate() {
readerActor ! Stop
- if (lastReader != null) {
- lastReader ! -1
+ val currentReadingThread = readingThread
+ if (currentReadingThread != null) {
+ currentReadingThread.interrupt()
}
}
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala?rev=1053473&r1=1053472&r2=1053473&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala Tue Dec 28 22:32:39 2010
@@ -46,8 +46,6 @@ import scala.tools.nsc.io.{AbstractFile,
import scala.tools.nsc.util._
import scala.tools.nsc.symtab.SymbolLoaders
import scala.tools.nsc.reporters.ConsoleReporter
-import scala.tools.nsc.reporters.ConsoleReporter
-import scala.tools.nsc.reporters.ConsoleReporter
import scala.tools.nsc.reporters.Reporter
import scala.tools.util.PathResolver
import scala.tools.nsc.util.{ClassPath, JavaClassPath}
@@ -178,15 +176,16 @@ class Shell(factory: InterpreterFactory,
plushln(welcomeMsg)
}
}
- val console: Actor = actor {
- println("starting console")
- try {
- interpreterLoop.main(Array[String]())
- } finally {
- for (l <- terminationListeners) {
- l.terminated
+ val console: Actor = new DaemonActor {
+ def act() {
+ try {
+ interpreterLoop.main(Array[String]())
+ } finally {
+ for (l <- terminationListeners) {
+ l.terminated
+ }
+ println("console terminated")
}
- println("console terminated")
}
}