public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: rmoseley@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Add ability to list loaded procs and remove loaded procs.
Date: Mon, 11 Feb 2008 23:07:00 -0000	[thread overview]
Message-ID: <20080211230743.22393.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  fe1332147611ba2f06e3f5ad38339c2763847dc2 (commit)
      from  af5efc444c59457e9a2f9b77382ddd6073ee4edc (commit)

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

- Log -----------------------------------------------------------------
commit fe1332147611ba2f06e3f5ad38339c2763847dc2
Author: Rick Moseley <rmoseley@localhost.localdomain>
Date:   Mon Feb 11 17:07:25 2008 -0600

    Add ability to list loaded procs and remove loaded procs.
    
    * UnloadCommand.java: New to unload loaded processes.
    * LoadCommand.java: Add capability to list loaded procs.
    * TestLoadCommand.java: Test above.

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

Summary of changes:
 frysk-core/frysk/hpd/ChangeLog                     |    7 ++
 frysk-core/frysk/hpd/LoadCommand.java              |   14 ++-
 frysk-core/frysk/hpd/TestLoadCommand.java          |    2 +-
 .../hpd/{KillCommand.java => UnloadCommand.java}   |  100 +++++++++++---------
 4 files changed, 73 insertions(+), 50 deletions(-)
 copy frysk-core/frysk/hpd/{KillCommand.java => UnloadCommand.java} (57%)

First 500 lines of diff:
diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog
index 0581c88..18c0667 100644
--- a/frysk-core/frysk/hpd/ChangeLog
+++ b/frysk-core/frysk/hpd/ChangeLog
@@ -1,3 +1,10 @@
+2008-02-11  Rick Moseley  <rmoseley@redhat.com>
+
+	* UnloadCommand.java: New to unload loaded processes.
+	* LoadCommand.java: Add capability to list loaded procs.
+	* TestLoadCommand.java: Test above.
+
+
 2008-02-08  Stan Cox  <scox@redhat.com>
 
 	* TestListCommand.java (testListFrames): Tweak the expect output.
diff --git a/frysk-core/frysk/hpd/LoadCommand.java b/frysk-core/frysk/hpd/LoadCommand.java
index dd552e4..6754677 100644
--- a/frysk-core/frysk/hpd/LoadCommand.java
+++ b/frysk-core/frysk/hpd/LoadCommand.java
@@ -1,6 +1,6 @@
 // This file is part of the program FRYSK.
 //
-// Copyright 2007, Red Hat Inc.
+// Copyright 2007, 2008 Red Hat Inc.
 //
 // FRYSK is free software; you can redistribute it and/or modify it
 // under the terms of the GNU General Public License as published by
@@ -91,6 +91,7 @@ public class LoadCommand extends ParameterizedCommand {
     }
 
     public void interpret(CLI cli, Input cmd, Object options) {
+	
 	Options o = (Options)options;
 	
 	if (cmd.size() > 2) {
@@ -112,7 +113,12 @@ public class LoadCommand extends ParameterizedCommand {
 	Host exeHost = new LinuxExeHost(Manager.eventLoop, executableFile);
 	Proc exeProc = frysk.util.Util.getProcFromExeFile(exeHost);
 
-	int procID = cli.idManager.reserveProcID();
+	int procID;
+	if (cli.taskID < 0)
+	    procID = cli.idManager.reserveProcID();
+	else
+	    procID = cli.taskID;
+	
 	cli.idManager.manageProc(exeProc, procID);
 
 	Iterator foo = cli.targetset.getTasks();
@@ -139,7 +145,7 @@ public class LoadCommand extends ParameterizedCommand {
      * 
      * @param cli is the current commandline interface object
      */
-    private void listLoadedProcs(CLI cli) {
+    public static void listLoadedProcs(CLI cli) {
 	HashMap listLoaded = cli.getLoadedProcs();
 	if (listLoaded.isEmpty()) {
 	    cli.addMessage("No loaded procs currently", Message.TYPE_NORMAL);
@@ -151,7 +157,7 @@ public class LoadCommand extends ParameterizedCommand {
 	    Map.Entry me = (Map.Entry) foo.next();
 	    Proc proc = (Proc) me.getKey();
 	    Integer taskId = (Integer) me.getValue();
-	    cli.addMessage("Task Id " + taskId + " = " + proc.getExe(), Message.TYPE_NORMAL);
+	    cli.addMessage("Loaded Task Id " + taskId + " = " + proc.getExe(), Message.TYPE_NORMAL);
 	}
     }
 
diff --git a/frysk-core/frysk/hpd/TestLoadCommand.java b/frysk-core/frysk/hpd/TestLoadCommand.java
index 164ef1c..156202a 100644
--- a/frysk-core/frysk/hpd/TestLoadCommand.java
+++ b/frysk-core/frysk/hpd/TestLoadCommand.java
@@ -109,7 +109,7 @@ public class TestLoadCommand extends TestLib {
 		"Loaded executable file.*");
 	e.sendCommandExpectPrompt("load " + Config.getPkgLibFile("funit-hello").getPath(),
 		"Loaded executable file.*");
-	e.sendCommandExpectPrompt("load", "Task Id ([0-9]+).*Task Id ([0-9]+).*");
+	e.sendCommandExpectPrompt("load", "Loaded Task Id ([0-9]+).*Task Id ([0-9]+).*");
 	e.send("quit\n");
 	e.expect("Quitting...");
 	e.close();
diff --git a/frysk-core/frysk/hpd/KillCommand.java b/frysk-core/frysk/hpd/UnloadCommand.java
similarity index 57%
copy from frysk-core/frysk/hpd/KillCommand.java
copy to frysk-core/frysk/hpd/UnloadCommand.java
index 66fc1f4..dbdadf9 100644
--- a/frysk-core/frysk/hpd/KillCommand.java
+++ b/frysk-core/frysk/hpd/UnloadCommand.java
@@ -1,6 +1,6 @@
 // This file is part of the program FRYSK.
 //
-// Copyright 2007, Red Hat Inc.
+// Copyright 2008, Red Hat Inc.
 //
 // FRYSK is free software; you can redistribute it and/or modify it
 // under the terms of the GNU General Public License as published by
@@ -39,65 +39,75 @@
 
 package frysk.hpd;
 
-import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
-import frysk.proc.Proc;
-import frysk.proc.Task;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import frysk.proc.Proc;
 
 /**
- * KillCommand kills the processes in the current target set.
+ * UnloadCommand handles the unloading of processes that have been loaded
+ * by the load command.
+ * 
  */
 
-public class KillCommand extends ParameterizedCommand {
-    private static String full = "kill the processes that are currently in " +
-    	"the current target set.  The processes are then reloaded and then " +
-    	"ready to be run again.";
+public class UnloadCommand extends ParameterizedCommand {
 
-    KillCommand() {
-	super("kill the current targetset", "kill", full);
+    UnloadCommand() {
+	super("unload",
+		"unload [ -t id ]",
+		"The unload command allows a user to unload processes that"
+		+ " have been loaded via the 'load' command.  The user can"
+		+ " either specify a 'path-to-executable' as a parameter if"
+		+ " the name of the process is not unique or use the name"
+		+ " of the process or unload the process using its target id"
+		+ " which is printed out if the unload command is given"
+		+ " without any parameters.");
     }
-
+    
     public void interpret(CLI cli, Input cmd, Object options) {
 	
-	ArrayList saveProcs = new ArrayList();
-	int procPID = 0;
-	Iterator foo = cli.targetset.getTasks();
-	while (foo.hasNext()) {
-	    Task task = (Task) foo.next();
-	    Proc proc = task.getProc();
-	    if (proc.getPid() != procPID) {
-		cli.addMessage("Killing process " + proc.getPid(),
-		//	" that was created from " + proc.getExe(),
-			Message.TYPE_NORMAL);
-		// Save the procs we are killing so we can re-load them later
-		saveProcs.add(proc.getExe());
-		procPID = proc.getPid();
-		// Now, call the Proc object to kill off the executable(s)
-		proc.requestKill();
-	    }
+	if (cmd.size() > 3) {
+	    throw new InvalidCommandException("Too many parameters");
+	} else if (cmd.size() < 1) {
+	    // List the loaded procs if no parameters entered
+	    LoadCommand.listLoadedProcs(cli);
+	    return;
 	}
 	
-	synchronized (cli) {
-	    // Clear the running procs set
-	    cli.runningProcs.clear();
-	    // Clear the current targetset
-	    cli.idManager.clearProcIDs();
-	    // Clear the stepping engine structures
-	    cli.steppingEngine.clear();
-	    // Add back in the stepping observer for cli
-	    cli.steppingEngine.addObserver(cli.steppingObserver);
+	if (cmd.parameter(0).equals("-t")) {
+	    if (cmd.size() != 2)
+		throw new InvalidCommandException("Not enough parameters");
+	    int id = Integer.parseInt(cmd.parameter(1));
+	    Proc proc = cli.idManager.getProc(id);
+	    removeFromHashMap(proc, cli.getLoadedProcs(), cli);
+	    proc.getHost().remove(proc);
+	    cli.idManager.removeProcID(id);
 	}
-	// Now loop through and re-load all of the killed procs
-	Iterator bar = saveProcs.iterator();
-	while (bar.hasNext()) {
-	    String cmdline = (String) bar.next();
-	    cli.execCommand("load " + cmdline + "\n");
+    }
+    
+    /**
+     * removeFromHashMap removes the designated process from the designated HashMap.
+     */
+    private void removeFromHashMap(Proc proc, HashMap procMap, CLI cli) {
+	String procCommand = proc.getExe();
+	Set procSet = procMap.entrySet();
+	Iterator foo = procSet.iterator();
+	while (foo.hasNext()) {
+	    Map.Entry me = (Map.Entry) foo.next();
+	    Proc newProc = (Proc) me.getKey();
+	    if (procCommand.equals(newProc.getExe())) {
+		synchronized (cli) {
+		    foo.remove();
+		}
+		return;
+	    }
 	}
     }
-
+    
     int completer(CLI cli, Input input, int cursor, List completions) {
 	return CompletionFactory.completeFileName(cli, input, cursor,
-						  completions);
+		completions);
     }
-}
+}
\ No newline at end of file


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


                 reply	other threads:[~2008-02-11 23:07 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=20080211230743.22393.qmail@sourceware.org \
    --to=rmoseley@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).