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).