public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: cagney@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Event-loop on main thread; consistent with other command-line utilities.
Date: Thu, 14 Feb 2008 21:41:00 -0000	[thread overview]
Message-ID: <20080214214155.5999.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  ea824c83ac5c61c806ad4fff8bd7fc304aab8b3a (commit)
      from  536bdb48547f55541dca484b61a1ba930363e407 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit ea824c83ac5c61c806ad4fff8bd7fc304aab8b3a
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Feb 14 16:41:13 2008 -0500

    Event-loop on main thread; consistent with other command-line utilities.
    
    frysk-core/frysk/bindir/ChangeLog
    2008-02-14  Andrew Cagney  <cagney@redhat.com>
    
    	* fhpd.java: Run the CLI in a sub-thread and the event-loop on the
    	main thread.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/bindir/ChangeLog |    5 ++
 frysk-core/frysk/bindir/fhpd.java |  134 +++++++++++++++++++++---------------
 2 files changed, 83 insertions(+), 56 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/bindir/ChangeLog b/frysk-core/frysk/bindir/ChangeLog
index 4167d36..1f83ca9 100644
--- a/frysk-core/frysk/bindir/ChangeLog
+++ b/frysk-core/frysk/bindir/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-14  Andrew Cagney  <cagney@redhat.com>
+
+	* fhpd.java: Run the CLI in a sub-thread and the event-loop on the
+	main thread.
+
 2008-02-13  Andrew Cagney  <cagney@redhat.com>
 
 	* fexe.java: Update to match Exe.
diff --git a/frysk-core/frysk/bindir/fhpd.java b/frysk-core/frysk/bindir/fhpd.java
index 11d9d72..b32bfbb 100644
--- a/frysk-core/frysk/bindir/fhpd.java
+++ b/frysk-core/frysk/bindir/fhpd.java
@@ -39,6 +39,7 @@
 
 package frysk.bindir;
 
+import frysk.event.Event;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -51,19 +52,19 @@ import frysk.util.CoreExePair;
 import frysk.proc.Manager;
 import frysk.proc.ProcId;
 import frysk.util.CommandlineParser;
-//import frysk.util.PtyTerminal;
 import frysk.util.ObservingTerminal;
 import gnu.classpath.tools.getopt.Option;
 import gnu.classpath.tools.getopt.OptionException;
 import frysk.sys.FileDescriptor;
 
 public class fhpd {
-    static int pid;
-    static File execFile;
-    static File core;
-    static File exeFile;
-    static boolean noExe = false;
-    static String sysroot;
+    private static int pid;
+    private static File execFile;
+    private static File core;
+    private static File exeFile;
+    private static boolean noExe = false;
+    private static String sysroot;
+    private static int exitStatus;
 
     final static class FhpdCompletor implements Completor {
         CLI cli;
@@ -75,10 +76,74 @@ public class fhpd {
         }
     }
 
+    // Start the command line in its own thread; but from within
+    // the event-loop.  This ensures that the event-loop is up and
+    // running before the CLI.
+    static class CommandLine extends Thread implements Event {
+	private String line = "";
+	private CLI cli;
+	private ConsoleReader reader;
+	CommandLine() {
+	    // Construct a command to pass in as initialization
+	    try {
+		if (pid > 0)
+		    line = "attach " + pid;
+		else if (execFile != null)
+		    line = "load " + execFile.getCanonicalPath();
+		else if (core != null) {
+		    line = "core " + core.getCanonicalPath();      
+		    if (exeFile != null)
+			line += " " + exeFile.getCanonicalPath();
+		    else if (noExe)
+			line +=" -noexe";
+		}
+		if (sysroot != null)
+		    line = line + " -sysroot " + sysroot;
+	    } catch (IOException e) {
+		System.err.println("Error: " + e);
+		System.exit(1);
+		return;
+	    }
+	    // Construct the HPD.
+	    cli = new CLI("(fhpd) ", System.out);
+	    try {
+		reader = new ConsoleReader
+		    (new FileInputStream(java.io.FileDescriptor.in),
+		     new PrintWriter(System.out),
+		     null,
+		     new ObservingTerminal(FileDescriptor.in));
+	    } catch (IOException ioe) {
+		System.out.println("ERROR: Could not create a command line");
+		System.out.print(ioe.getMessage());
+		System.exit(1);
+		return;
+	    }
+	    Completor fhpdCompletor = new FhpdCompletor(cli);
+	    reader.addCompletor(fhpdCompletor);
+	}
+	public void execute() {
+	    start();
+	}
+	public void run() {
+	    try {
+		cli.execCommand(line);
+		while (line != null && ! (line.equals("quit")
+					  || line.equals("q")
+					  || line.equals("exit"))) {
+		    line = reader.readLine(cli.getPrompt());
+		    cli.execCommand(line);
+		}
+	    } catch (IOException ioe) {
+		System.out.println("ERROR: Could not read from command line");
+		System.out.print(ioe.getMessage());
+		exitStatus = 1;
+	    }
+	    Manager.eventLoop.requestStop();
+	}
+    }
+    
     public static void main (String[] args) {
-        CLI cli;
         CommandlineParser parser = new CommandlineParser ("fhpd") {
-
                 //@Override
                 public void parseCommand (String[] command) {
                     execFile = new File (command[0]);
@@ -88,7 +153,6 @@ public class fhpd {
                                                    + command[0]);
                     }
                 }
-
                 //@Override
                 public void parsePids (ProcId[] pids) {
                     pid = pids[0].id;
@@ -126,53 +190,11 @@ public class fhpd {
     
         parser.setHeader("Usage: fhpd <PID> || fhpd <EXEFILE> || fhpd <COREFILE> [<EXEFILE>]");
         parser.parse(args);
-        Manager.eventLoop.start();
-        String line = "";
-    
-        try {
-            if (pid > 0)
-                line = "attach " + pid;
-            else if (execFile != null)
-                line = "load " + execFile.getCanonicalPath();
-            else if (core != null) {
-                line = "core " + core.getCanonicalPath();      
-                if (exeFile != null)
-                    line += " " + exeFile.getCanonicalPath();
-                else if (noExe)
-                    line +=" -noexe";
-            }
-            if (sysroot != null)
-                line = line + " -sysroot " + sysroot;
-        }
-        catch (IOException ignore) {}
-    
-        cli = new CLI("(fhpd) ", System.out);
-        ConsoleReader reader = null; // the jline reader
 
-        try {
-            reader = new ConsoleReader(new FileInputStream(java.io.FileDescriptor.in),
-                                       new PrintWriter(System.out),
-                                       null,
-                                       new ObservingTerminal(FileDescriptor.in));
-        }
-        catch (IOException ioe) {
-            System.out.println("ERROR: Could not create a command line");
-            System.out.print(ioe.getMessage());
-        }
+	Manager.eventLoop.add(new CommandLine());
 
-        Completor fhpdCompletor = new FhpdCompletor(cli);
-        reader.addCompletor(fhpdCompletor);
-        try {
-            cli.execCommand(line);
-            while (line != null && ! (line.equals("quit") || line.equals("q")
-                                      || line.equals("exit"))) {
-                    line = reader.readLine(cli.getPrompt());
-                    cli.execCommand(line);
-                }
-        }
-        catch (IOException ioe) {
-            System.out.println("ERROR: Could not read from command line");
-            System.out.print(ioe.getMessage());
-        }
+	// Run the event loop then exit when it exits (or crashes).
+	Manager.eventLoop.run();
+	System.exit(exitStatus);
     }
 }


hooks/post-receive
--
frysk system monitor/debugger


                 reply	other threads:[~2008-02-14 21:41 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080214214155.5999.qmail@sourceware.org \
    --to=cagney@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).