public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: tthomas@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Ctrl-C handling for fhpd.
Date: Fri, 07 Mar 2008 20:33:00 -0000	[thread overview]
Message-ID: <20080307203320.668.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  72d3c65c57aab4c51e312cc4ccb3191092daa5f1 (commit)
      from  e337778c9c77d8fbd6bd36f695ea50e8d9a3cd4f (commit)

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

- Log -----------------------------------------------------------------
commit 72d3c65c57aab4c51e312cc4ccb3191092daa5f1
Author: Teresa Thomas <tthomas@redhat.com>
Date:   Fri Mar 7 14:29:50 2008 -0500

    Ctrl-C handling for fhpd.
    
    frysk-core/frysk/hpd/ChangeLog:
    2008-03-07  Teresa Thomas  <tthomas@redhat.com>
    .
    	* CLI.java (SteppingObserver.getMonitor): Add events to
    	handle SIGINT.
    	* ShellCommand.java (interpretCommand): Ditto.
    	* SigIntHandler.java: New.
    
    frysk-core/frysk/bindir/ChangeLog:
    2008-03-07  Teresa Thomas  <tthomas@redhat.com>
    
    	* fhpd.java (main): Add event to handle SIGINT.

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

Summary of changes:
 frysk-core/frysk/bindir/ChangeLog                  |    4 +++
 frysk-core/frysk/bindir/fhpd.java                  |    3 ++
 frysk-core/frysk/hpd/CLI.java                      |   24 ++++++++++++++++-
 frysk-core/frysk/hpd/ChangeLog                     |    7 +++++
 frysk-core/frysk/hpd/ShellCommand.java             |   15 ++++++++++-
 .../{TestShellCommand.java => SigIntHandler.java}  |   28 ++++++++++++-------
 6 files changed, 69 insertions(+), 12 deletions(-)
 copy frysk-core/frysk/hpd/{TestShellCommand.java => SigIntHandler.java} (80%)

First 500 lines of diff:
diff --git a/frysk-core/frysk/bindir/ChangeLog b/frysk-core/frysk/bindir/ChangeLog
index b82ef23..a399be4 100644
--- a/frysk-core/frysk/bindir/ChangeLog
+++ b/frysk-core/frysk/bindir/ChangeLog
@@ -1,3 +1,7 @@
+2008-03-07  Teresa Thomas  <tthomas@redhat.com>
+
+	* fhpd.java (main): Add event to handle SIGINT.
+
 2008-03-07  Sami Wagiaalla  <swagiaal@redhat.com>
 
 	ProcRunUtil.java: Renamed ProcRunningUtil to ProcRunUtil.
diff --git a/frysk-core/frysk/bindir/fhpd.java b/frysk-core/frysk/bindir/fhpd.java
index efc8520..af1a5bc 100644
--- a/frysk-core/frysk/bindir/fhpd.java
+++ b/frysk-core/frysk/bindir/fhpd.java
@@ -42,6 +42,7 @@ package frysk.bindir;
 import frysk.hpd.CoreCommand;
 import frysk.hpd.LoadCommand;
 import frysk.hpd.AttachCommand;
+import frysk.hpd.SigIntHandler;
 import frysk.event.Event;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -173,6 +174,8 @@ public class fhpd {
         parser.setHeader("Usage: fhpd <PID> || fhpd <EXEFILE> || fhpd <COREFILE> [<EXEFILE>]");
         parser.parse(args);
 	Manager.eventLoop.add(new CommandLine());
+	// Add event to handle Ctrl-C signal
+	Manager.eventLoop.add(SigIntHandler.fhpd);
 
 	// Run the event loop then exit when it exits (or crashes).
 	Manager.eventLoop.run();
diff --git a/frysk-core/frysk/hpd/CLI.java b/frysk-core/frysk/hpd/CLI.java
index f8f16c8..dc85569 100644
--- a/frysk-core/frysk/hpd/CLI.java
+++ b/frysk-core/frysk/hpd/CLI.java
@@ -55,13 +55,16 @@ import java.util.WeakHashMap;
 import frysk.debuginfo.DebugInfo;
 import frysk.debuginfo.DebugInfoFrame;
 import frysk.debuginfo.DebugInfoStackFactory;
+import frysk.proc.Manager;
 import frysk.proc.Proc;
 import frysk.proc.Task;
 import frysk.rt.ProcTaskIDManager;
 import frysk.stepping.SteppingEngine;
 import frysk.stepping.TaskStepEngine;
+import frysk.sys.Signal;
 import frysk.util.CountDownLatch;
 import frysk.util.WordWrapWriter;
+import frysk.event.SignalEvent;
 import frysk.expr.Expression;
 import frysk.expr.ScratchSymTab;
 import frysk.expr.ExprSymTab;
@@ -414,12 +417,31 @@ public class CLI {
         private Object monitor = new Object();
 
         public Object getMonitor () {
+            
+	    // Event to handle Ctrl-C signal received during
+	    // stepping.
+	    Manager.eventLoop.add(new SignalEvent(Signal.INT) {
+		public void execute () {
+		    System.out.println ("Stepping engine: Got SIGINT");
+		    // Notify the stepping engine to stop waiting.
+		    synchronized (monitor) {
+			monitor.notify();
+		    }
+		    // Set Ctrl-C handler back to fhpd settings
+		    Manager.eventLoop.add(SigIntHandler.fhpd);
+		}
+	    });  
+	    
             return this.monitor;
         }
 
         public void update (Observable observable, Object arg) {
             TaskStepEngine tse = (TaskStepEngine) arg;
-            if (!tse.isAlive()) {
+            
+	    // Ensure Ctrl-C handler is set back to fhpd settings
+	    Manager.eventLoop.add(SigIntHandler.fhpd);
+            
+	    if (!tse.isAlive()) {
 		addMessage(tse.getMessage(), Message.TYPE_VERBOSE);
 		tse.setMessage("");
 		flushMessages();
diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog
index 4f4d065..77f9c1e 100644
--- a/frysk-core/frysk/hpd/ChangeLog
+++ b/frysk-core/frysk/hpd/ChangeLog
@@ -1,3 +1,10 @@
+2008-03-07  Teresa Thomas  <tthomas@redhat.com>
+.
+	* CLI.java (SteppingObserver.getMonitor): Add events to
+	handle SIGINT.
+	* ShellCommand.java (interpretCommand): Ditto.	
+	* SigIntHandler.java: New.
+
 2008-03-05  Tom Tromey  <tromey@redhat.com>
 
 	Bug 5809
diff --git a/frysk-core/frysk/hpd/ShellCommand.java b/frysk-core/frysk/hpd/ShellCommand.java
index 11c4b33..79f84a1 100644
--- a/frysk-core/frysk/hpd/ShellCommand.java
+++ b/frysk-core/frysk/hpd/ShellCommand.java
@@ -48,6 +48,7 @@ import frysk.proc.TaskObserver;
 import frysk.sys.FileDescriptor;
 import frysk.util.CountDownLatch;
 import frysk.util.PtyTerminal;
+import frysk.event.SignalEvent;
 import frysk.isa.signals.Signal;
 
 class ShellCommand extends NoOptsCommand {
@@ -79,7 +80,16 @@ class ShellCommand extends NoOptsCommand {
 	// Set terminal to initial setting.
 	PtyTerminal.setToInitConsole(FileDescriptor.in);
 
-	// Request an attached proc to execute command.
+	// SIGINT handling for shell command.
+	Manager.eventLoop.add(new SignalEvent(frysk.sys.Signal.INT) {
+	    public void execute () {
+		// Prints this message and gets out
+		// of shell command.
+		System.out.println ("shell: Got SIGINT");
+	    }
+	});
+	
+	// Request for an attached proc to execute the command.
   	Manager.host.requestCreateAttachedProc(command,
 					       new TaskObserver.Attached() {  	    
   	    public Action updateAttached (Task task)
@@ -122,6 +132,9 @@ class ShellCommand extends NoOptsCommand {
   	    }
   	}  	  	
   	
+	// Set Ctrl-C handler back to fhpd settings
+	Manager.eventLoop.add(SigIntHandler.fhpd);
+	
   	// Set terminal back to fhpd settings, i.e. character buffered.
 	PtyTerminal.setToCharBufferedConsole(FileDescriptor.in);
     }
diff --git a/frysk-core/frysk/hpd/TestShellCommand.java b/frysk-core/frysk/hpd/SigIntHandler.java
similarity index 80%
copy from frysk-core/frysk/hpd/TestShellCommand.java
copy to frysk-core/frysk/hpd/SigIntHandler.java
index 2bb44e0..235d9f0 100644
--- a/frysk-core/frysk/hpd/TestShellCommand.java
+++ b/frysk-core/frysk/hpd/SigIntHandler.java
@@ -39,17 +39,25 @@
 
 package frysk.hpd;
 
+import frysk.event.SignalEvent;
+import frysk.sys.Signal;
+
 /**
- * This class tests the "shell" command.
+ * Events to handle Cntrl-C signal.
  */
 
-public class TestShellCommand extends TestLib {
-    
-    public void testShellCommand() {
-	e = new HpdTestbed();
-	e.sendCommandExpectPrompt("shell echo $$", ".*[0-9]+.*");
-	e.sendCommandExpectPrompt("shell blahBLAHblah", ".*command not found.*");
-	e.sendCommandExpectPrompt("shell -help", ".*shell <command string>.*");
-	e.close();
-    }
+public class SigIntHandler {
+
+    /**
+     * This event overrides the default behaviour of 
+     * SIGINT on an fhpd process.
+     */
+    public static final SignalEvent fhpd = new SignalEvent(Signal.INT) {
+	public void execute () {
+	    // Do nothing. Just print prompt again
+	    // XXX: Reader will continue reading input
+	    // till a return character is received.
+	    System.out.print("\n(fhpd) ");
+	}
+    };
 }
\ No newline at end of file


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


                 reply	other threads:[~2008-03-07 20:33 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=20080307203320.668.qmail@sourceware.org \
    --to=tthomas@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).