# HG changeset patch # User wenzelm # Date 1316778271 -7200 # Node ID 55274f7e306bb2dfa6b7930e91de50bfd13782a8 # Parent 73accf69135d340a7c27673c8307728fced3fb76 explicit option for socket vs. fifo communication; diff -r 73accf69135d -r 55274f7e306b src/Pure/System/isabelle_process.scala --- a/src/Pure/System/isabelle_process.scala Fri Sep 23 13:43:44 2011 +0200 +++ b/src/Pure/System/isabelle_process.scala Fri Sep 23 13:44:31 2011 +0200 @@ -75,16 +75,15 @@ } -class Isabelle_Process(timeout: Time, receiver: Isabelle_Process.Message => Unit, args: String*) +class Isabelle_Process( + timeout: Time = Time.seconds(10), + use_socket: Boolean = false, + receiver: Isabelle_Process.Message => Unit = Console.println(_), + args: List[String] = Nil) { import Isabelle_Process._ - /* demo constructor */ - - def this(args: String*) = this(Time.seconds(10), Console.println(_), args: _*) - - /* results */ private def system_result(text: String) @@ -131,13 +130,13 @@ /** process manager **/ - private val system_channel = System_Channel() + private val system_channel = System_Channel(use_socket) private val process = try { val cmdline = Isabelle_System.getenv_strict("ISABELLE_PROCESS") :: - (system_channel.isabelle_args ::: args.toList) + (system_channel.isabelle_args ::: args) new Isabelle_System.Managed_Process(true, cmdline: _*) } catch { case e: IOException => system_channel.accepted(); throw(e) } diff -r 73accf69135d -r 55274f7e306b src/Pure/System/session.scala --- a/src/Pure/System/session.scala Fri Sep 23 13:43:44 2011 +0200 +++ b/src/Pure/System/session.scala Fri Sep 23 13:44:31 2011 +0200 @@ -137,7 +137,7 @@ /* actor messages */ - private case class Start(timeout: Time, args: List[String]) + private case class Start(timeout: Time, use_socket: Boolean, args: List[String]) private case object Cancel_Execution private case class Init_Node(name: Document.Node.Name, header: Document.Node_Header, perspective: Text.Perspective, text: String) @@ -405,11 +405,12 @@ receiveWithin(commands_changed_delay.flush_timeout) { case TIMEOUT => commands_changed_delay.flush() - case Start(timeout, args) if prover.isEmpty => + case Start(timeout, use_socket, args) if prover.isEmpty => if (phase == Session.Inactive || phase == Session.Failed) { phase = Session.Startup prover = - Some(new Isabelle_Process(timeout, receiver.invoke _, args:_*) with Isar_Document) + Some(new Isabelle_Process(timeout, use_socket, receiver.invoke _, args) + with Isar_Document) } case Stop => @@ -468,7 +469,8 @@ /* actions */ - def start(timeout: Time, args: List[String]) { session_actor ! Start(timeout, args) } + def start(timeout: Time = Time.seconds(10), use_socket: Boolean = false, args: List[String]) + { session_actor ! Start(timeout, use_socket, args) } def stop() { commands_changed_buffer !? Stop; session_actor !? Stop } diff -r 73accf69135d -r 55274f7e306b src/Pure/System/system_channel.scala --- a/src/Pure/System/system_channel.scala Fri Sep 23 13:43:44 2011 +0200 +++ b/src/Pure/System/system_channel.scala Fri Sep 23 13:44:31 2011 +0200 @@ -14,7 +14,8 @@ object System_Channel { - def apply(): System_Channel = new Fifo_Channel + def apply(use_socket: Boolean = false): System_Channel = + if (use_socket) new Socket_Channel else new Fifo_Channel } abstract class System_Channel diff -r 73accf69135d -r 55274f7e306b src/Tools/jEdit/lib/Tools/jedit --- a/src/Tools/jEdit/lib/Tools/jedit Fri Sep 23 13:43:44 2011 +0200 +++ b/src/Tools/jEdit/lib/Tools/jedit Fri Sep 23 13:44:31 2011 +0200 @@ -48,6 +48,7 @@ echo " Options are:" echo " -J OPTION add JVM runtime option" echo " (default JEDIT_JAVA_OPTIONS=$JEDIT_JAVA_OPTIONS)" + echo " -S BOOL enable socket-based communication (default: named pipe)" echo " -b build only" echo " -d enable debugger" echo " -f fresh build" @@ -68,6 +69,11 @@ exit 2 } +function check_bool() +{ + [ "$1" = true -o "$1" = false ] || fail "Bad boolean: \"$1\"" +} + function failed() { fail "Failed!" @@ -80,18 +86,23 @@ BUILD_ONLY=false BUILD_JARS="jars" +JEDIT_USE_SOCKET="false" JEDIT_LOGIC="$ISABELLE_LOGIC" JEDIT_PRINT_MODE="" function getoptions() { OPTIND=1 - while getopts "J:bdfj:l:m:" OPT + while getopts "J:S:bdfj:l:m:" OPT do case "$OPT" in J) JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG" ;; + S) + check_bool "$OPTARG" + JEDIT_USE_SOCKET="$OPTARG" + ;; b) BUILD_ONLY=true ;; @@ -290,7 +301,7 @@ ;; esac - export JEDIT_LOGIC JEDIT_PRINT_MODE + export JEDIT_USE_SOCKET JEDIT_LOGIC JEDIT_PRINT_MODE exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" \ -jar "$(jvmpath "$JEDIT_HOME/dist/jedit.jar")" \ diff -r 73accf69135d -r 55274f7e306b src/Tools/jEdit/src/plugin.scala --- a/src/Tools/jEdit/src/plugin.scala Fri Sep 23 13:43:44 2011 +0200 +++ b/src/Tools/jEdit/src/plugin.scala Fri Sep 23 13:44:31 2011 +0200 @@ -320,13 +320,14 @@ def start_session() { val timeout = Time_Property("startup-timeout", Time.seconds(10)) max Time.seconds(5) + val use_socket = Isabelle_System.getenv("JEDIT_USE_SOCKET") == "true" val modes = space_explode(',', Isabelle_System.getenv("JEDIT_PRINT_MODE")).map("-m" + _) val logic = { val logic = Property("logic") if (logic != null && logic != "") logic else Isabelle.default_logic() } - session.start(timeout, modes ::: List(logic)) + session.start(timeout, use_socket, modes ::: List(logic)) }