public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: rmoseley@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Fix ability to unload procs after loading. Date: Thu, 21 Feb 2008 22:20:00 -0000 [thread overview] Message-ID: <20080221222020.1651.qmail@sourceware.org> (raw) The branch, master has been updated via 2ac8ff9e34c085e91cccfb9a2d4915ef7a73f893 (commit) from 80b452ea9005301c922aa44b47c160496f9cd366 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 2ac8ff9e34c085e91cccfb9a2d4915ef7a73f893 Author: Rick Moseley <rmoseley@dhcp-215.hsv.redhat.com> Date: Thu Feb 21 16:18:33 2008 -0600 Fix ability to unload procs after loading. * PTSet.java: Add removeProc(int procid) interface. * AllPTSet.java: Implement above interface. * DynamicPTSet.java: Ditto. * ExecPTSet.java: Ditto. * StatePTSet.java: Ditto. * StaticPTSet.java: Ditto. * LoadCommand.java: Add listing of info when no params. * UnloadCommand.java: Ditto; fix removing a procid. * TestLoadCommand.java: Fix to accommodate above changes. * TestRunCommand.java: Ditto. * ProcTaskIDManager.java(removeProc): Change to set a proc ID to null instead of removing it. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/hpd/AllPTSet.java | 10 +++++ frysk-core/frysk/hpd/ChangeLog | 13 +++++++ frysk-core/frysk/hpd/DynamicPTSet.java | 7 ++++ frysk-core/frysk/hpd/ExecPTSet.java | 7 ++++ frysk-core/frysk/hpd/LoadCommand.java | 35 ++++--------------- frysk-core/frysk/hpd/PTSet.java | 1 + frysk-core/frysk/hpd/StatePTSet.java | 7 ++++ frysk-core/frysk/hpd/StaticPTSet.java | 7 ++++ frysk-core/frysk/hpd/TestLoadCommand.java | 14 ++++---- frysk-core/frysk/hpd/TestRunCommand.java | 2 +- frysk-core/frysk/hpd/UnloadCommand.java | 51 ++++++++++++++++++++++++--- frysk-core/frysk/rt/ChangeLog | 5 +++ frysk-core/frysk/rt/ProcTaskIDManager.java | 17 +++++---- 13 files changed, 128 insertions(+), 48 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/hpd/AllPTSet.java b/frysk-core/frysk/hpd/AllPTSet.java index 1afaf83..5e70b0e 100644 --- a/frysk-core/frysk/hpd/AllPTSet.java +++ b/frysk-core/frysk/hpd/AllPTSet.java @@ -127,6 +127,16 @@ class AllPTSet implements PTSet return result.iterator(); } + /** + * Remove a proc from the list + */ + + public void removeProc(int procId) { + synchronized (manager) { + manager.removeProc(procId); + } + } + /** * Generate a subset of this set, based on the tree generated by set * notation parser. diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog index 60b8e8f..ce23747 100644 --- a/frysk-core/frysk/hpd/ChangeLog +++ b/frysk-core/frysk/hpd/ChangeLog @@ -1,3 +1,16 @@ +2008-02-21 Rick Moseley <rmoseley@redhat.com> + + * PTSet.java: Add removeProc(int procid) interface. + * AllPTSet.java: Implement above interface. + * DynamicPTSet.java: Ditto. + * ExecPTSet.java: Ditto. + * StatePTSet.java: Ditto. + * StaticPTSet.java: Ditto. + * LoadCommand.java: Add listing of info when no params. + * UnloadCommand.java: Ditto; fix removing a procid. + * TestLoadCommand.java: Fix to accommodate above changes. + * TestRunCommand.java: Ditto. + 2008-02-19 Rick Moseley <rmoseley@redhat.com> * ViewsetCommand.java: Add executable path to listing; diff --git a/frysk-core/frysk/hpd/DynamicPTSet.java b/frysk-core/frysk/hpd/DynamicPTSet.java index c42f6d9..c7faaea 100644 --- a/frysk-core/frysk/hpd/DynamicPTSet.java +++ b/frysk-core/frysk/hpd/DynamicPTSet.java @@ -103,4 +103,11 @@ class DynamicPTSet implements PTSet { return result.iterator(); } + + /** + * Remove a proc from the list + */ + + public void removeProc(int procId) { + } } diff --git a/frysk-core/frysk/hpd/ExecPTSet.java b/frysk-core/frysk/hpd/ExecPTSet.java index 20abbb6..fd5bfc0 100644 --- a/frysk-core/frysk/hpd/ExecPTSet.java +++ b/frysk-core/frysk/hpd/ExecPTSet.java @@ -112,4 +112,11 @@ class ExecPTSet implements PTSet return result.iterator(); } + + /** + * Remove a proc from the list + */ + + public void removeProc(int procId) { + } } diff --git a/frysk-core/frysk/hpd/LoadCommand.java b/frysk-core/frysk/hpd/LoadCommand.java index 6754677..bbd9893 100644 --- a/frysk-core/frysk/hpd/LoadCommand.java +++ b/frysk-core/frysk/hpd/LoadCommand.java @@ -40,10 +40,10 @@ package frysk.hpd; import java.io.File; -import java.util.HashMap; +//import java.util.HashMap; import java.util.Iterator; -import java.util.Map; -import java.util.Set; +//import java.util.Map; +//import java.util.Set; import frysk.debuginfo.DebugInfo; import frysk.debuginfo.DebugInfoFrame; import frysk.debuginfo.DebugInfoStackFactory; @@ -93,12 +93,14 @@ public class LoadCommand extends ParameterizedCommand { public void interpret(CLI cli, Input cmd, Object options) { Options o = (Options)options; - if (cmd.size() > 2) { throw new InvalidCommandException("Too many parameters"); - } else if (cmd.size() < 1) { + } else if (cmd.size() < 1 && !cli.loadedProcs.isEmpty()) { // List the loaded procs if no parameters entered - listLoadedProcs(cli); + ViewsetCommand.printLoop(cli.targetset, cli, "Target set", true); + return; + } else if (cmd.size() < 1 && cli.loadedProcs.isEmpty()) { + cli.addMessage("No loaded procs currently", Message.TYPE_NORMAL); return; } @@ -140,27 +142,6 @@ public class LoadCommand extends ParameterizedCommand { Message.TYPE_NORMAL); } - /** - * listLoadedProcs lists the currently loaded procs - * - * @param cli is the current commandline interface object - */ - public static void listLoadedProcs(CLI cli) { - HashMap listLoaded = cli.getLoadedProcs(); - if (listLoaded.isEmpty()) { - cli.addMessage("No loaded procs currently", Message.TYPE_NORMAL); - return; - } - Set procSet = listLoaded.entrySet(); - Iterator foo = procSet.iterator(); - while (foo.hasNext()) { - Map.Entry me = (Map.Entry) foo.next(); - Proc proc = (Proc) me.getKey(); - Integer taskId = (Integer) me.getValue(); - cli.addMessage("Loaded Task Id " + taskId + " = " + proc.getExe(), Message.TYPE_NORMAL); - } - } - int completer(CLI cli, Input input, int cursor, List completions) { return CompletionFactory.completeFileName(cli, input, cursor, completions); diff --git a/frysk-core/frysk/hpd/PTSet.java b/frysk-core/frysk/hpd/PTSet.java index 37ee05a..64ca07e 100644 --- a/frysk-core/frysk/hpd/PTSet.java +++ b/frysk-core/frysk/hpd/PTSet.java @@ -43,6 +43,7 @@ import java.util.Iterator; interface PTSet { boolean containsTask(int procid, int taskid); + void removeProc(int procid); Iterator getTasks(); Iterator getTaskData(); } diff --git a/frysk-core/frysk/hpd/StatePTSet.java b/frysk-core/frysk/hpd/StatePTSet.java index 654bb74..33d3a87 100644 --- a/frysk-core/frysk/hpd/StatePTSet.java +++ b/frysk-core/frysk/hpd/StatePTSet.java @@ -112,4 +112,11 @@ class StatePTSet implements PTSet return result.iterator(); } + + /** + * Remove a proc from the list + */ + + public void removeProc(int procId) { + } } diff --git a/frysk-core/frysk/hpd/StaticPTSet.java b/frysk-core/frysk/hpd/StaticPTSet.java index 0277116..195ce69 100644 --- a/frysk-core/frysk/hpd/StaticPTSet.java +++ b/frysk-core/frysk/hpd/StaticPTSet.java @@ -133,4 +133,11 @@ class StaticPTSet implements PTSet temp.add(ptset2[i]); return new StaticPTSet((ProcTasks[])temp.toArray(ptset1)); } + + /** + * Remove a proc from the list + */ + + public void removeProc(int procId) { + } } diff --git a/frysk-core/frysk/hpd/TestLoadCommand.java b/frysk-core/frysk/hpd/TestLoadCommand.java index 156202a..dba8d10 100644 --- a/frysk-core/frysk/hpd/TestLoadCommand.java +++ b/frysk-core/frysk/hpd/TestLoadCommand.java @@ -53,7 +53,7 @@ public class TestLoadCommand extends TestLib { + "\n"); e.expect("Loaded executable file.*"); e.send("quit\n"); - e.expect("Quitting..."); + e.expect("Quitting\\.\\.\\."); e.close(); } @@ -63,7 +63,7 @@ public class TestLoadCommand extends TestLib { + "foo\n"); e.expect("File does not exist or is not readable*"); e.send("quit\n"); - e.expect("Quitting..."); + e.expect("Quitting\\.\\.\\."); e.close(); } @@ -79,7 +79,7 @@ public class TestLoadCommand extends TestLib { e.sendCommandExpectPrompt("start", "Attached to process.*Attached to process.*"); e.sendCommandExpectPrompt("focus", "Target set.*\\[0\\.0\\].*\\[1\\.0].*"); e.send("quit\n"); - e.expect("Quitting..."); + e.expect("Quitting\\.\\.\\."); e.close(); } @@ -91,7 +91,7 @@ public class TestLoadCommand extends TestLib { "Loaded executable file.*"); e.sendCommandExpectPrompt("start", "Attached to process.*Attached to process.*"); e.send("quit\n"); - e.expect("Quitting..."); + e.expect("Quitting\\.\\.\\."); e.close(); } @@ -99,7 +99,7 @@ public class TestLoadCommand extends TestLib { e = new HpdTestbed(); e.sendCommandExpectPrompt("load", "No loaded procs currently.*"); e.send("quit\n"); - e.expect("Quitting..."); + e.expect("Quitting\\.\\.\\."); e.close(); } @@ -109,9 +109,9 @@ public class TestLoadCommand extends TestLib { "Loaded executable file.*"); e.sendCommandExpectPrompt("load " + Config.getPkgLibFile("funit-hello").getPath(), "Loaded executable file.*"); - e.sendCommandExpectPrompt("load", "Loaded Task Id ([0-9]+).*Task Id ([0-9]+).*"); + e.sendCommandExpectPrompt("load", "Target set.*\\[0\\.0\\].*\\[1\\.0].*"); e.send("quit\n"); - e.expect("Quitting..."); + e.expect("Quitting\\.\\.\\."); e.close(); } } diff --git a/frysk-core/frysk/hpd/TestRunCommand.java b/frysk-core/frysk/hpd/TestRunCommand.java index af1034e..4c4e761 100644 --- a/frysk-core/frysk/hpd/TestRunCommand.java +++ b/frysk-core/frysk/hpd/TestRunCommand.java @@ -58,7 +58,7 @@ public class TestRunCommand extends TestLib { "Attached to process ([0-9]+).*Running process ([0-9]+).*"); try { Thread.sleep(1000); } catch (Exception e) {} e.sendCommandExpectPrompt("focus","Target set.*\\[0\\.0\\]\t\t([0-9]+)" + - "\t([0-9]+).*" + "\\[0\\.1\\]\t\t([0-9]+)\t([0-9]+).*"); + "\t([0-9]+).*\\[0\\.1\\]\t\t([0-9]+)\t([0-9]+).*"); e.send("quit\n"); e.expect("Quitting\\.\\.\\."); e.close(); diff --git a/frysk-core/frysk/hpd/UnloadCommand.java b/frysk-core/frysk/hpd/UnloadCommand.java index dbdadf9..741c587 100644 --- a/frysk-core/frysk/hpd/UnloadCommand.java +++ b/frysk-core/frysk/hpd/UnloadCommand.java @@ -45,6 +45,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import frysk.proc.Proc; +//import frysk.proc.Task; /** * UnloadCommand handles the unloading of processes that have been loaded @@ -56,7 +57,7 @@ public class UnloadCommand extends ParameterizedCommand { UnloadCommand() { super("unload", - "unload [ -t id ]", + "unload [ -t id | -all ]", "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" @@ -70,9 +71,13 @@ public class UnloadCommand extends ParameterizedCommand { if (cmd.size() > 3) { throw new InvalidCommandException("Too many parameters"); - } else if (cmd.size() < 1) { + } else if (cmd.size() < 1 && !cli.loadedProcs.isEmpty()) { // List the loaded procs if no parameters entered - LoadCommand.listLoadedProcs(cli); + ViewsetCommand.printLoop(cli.targetset, cli, "Target set", true); + return; + } else if (cmd.size() < 1 && cli.loadedProcs.isEmpty()) { + cli.addMessage("No loaded procs currently, must load a proc before unloading", + Message.TYPE_NORMAL); return; } @@ -81,23 +86,36 @@ public class UnloadCommand extends ParameterizedCommand { throw new InvalidCommandException("Not enough parameters"); int id = Integer.parseInt(cmd.parameter(1)); Proc proc = cli.idManager.getProc(id); + if (proc == null) { + cli.addMessage("Trying to remove a proc that has not been loaded", Message.TYPE_ERROR); + return; + } removeFromHashMap(proc, cli.getLoadedProcs(), cli); + cli.targetset.removeProc(id); proc.getHost().remove(proc); - cli.idManager.removeProcID(id); + return; + } + if (cmd.parameter(0).equals("-all")) { + removeAllProcs(cli.getLoadedProcs(), cli); + cli.addMessage("All loaded procs removed", Message.TYPE_NORMAL); + return; } } /** * removeFromHashMap removes the designated process from the designated HashMap. + * + * @param proc is the proc object to be removed + * @param procMap is the HashMap of the procs to search for removal + * @param cli is the current command line interface object */ 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())) { + if (proc.getExe().equals(newProc.getExe())) { synchronized (cli) { foo.remove(); } @@ -105,6 +123,27 @@ public class UnloadCommand extends ParameterizedCommand { } } } + + /** + * removeAllProcs removes all of the procs loaded via the load command + * + * @param procMap is a HashMap of the set of procs to remove + * @param cli is the current command line interface object + * + */ + private void removeAllProcs(HashMap procMap, CLI cli) { + Set procSet = procMap.entrySet(); + Iterator foo = procSet.iterator(); + while (foo.hasNext()) { + Map.Entry me = (Map.Entry) foo.next(); + Proc proc = (Proc) me.getKey(); + proc.getHost().remove(proc); + } + synchronized (cli) { + procMap.clear(); + } + + } int completer(CLI cli, Input input, int cursor, List completions) { return CompletionFactory.completeFileName(cli, input, cursor, diff --git a/frysk-core/frysk/rt/ChangeLog b/frysk-core/frysk/rt/ChangeLog index 2e8a851..6f20081 100644 --- a/frysk-core/frysk/rt/ChangeLog +++ b/frysk-core/frysk/rt/ChangeLog @@ -1,3 +1,8 @@ +2008-02-21 Rick Moseley <rmoseley@redhat.com> + + * ProcTaskIDManager.java(removeProc): Change to set + a proc ID to null instead of removing it. + 2008-02-11 Rick Moseley <rmoseley@redhat.com> * ProcTaskIDManager.java: Remove duplicate method. diff --git a/frysk-core/frysk/rt/ProcTaskIDManager.java b/frysk-core/frysk/rt/ProcTaskIDManager.java index 96188a4..6e28f24 100644 --- a/frysk-core/frysk/rt/ProcTaskIDManager.java +++ b/frysk-core/frysk/rt/ProcTaskIDManager.java @@ -104,13 +104,6 @@ public class ProcTaskIDManager else return null; } - - public synchronized boolean removeProcID(int id) { - if (id > procList.size() || id < 0) - return false; - procList.remove(id); - return true; - } public synchronized int getProcID(Proc proc) { Integer result = (Integer)procMap.get(proc); @@ -146,6 +139,16 @@ public class ProcTaskIDManager return null; return (Task)entry.tasks.get(taskID); } + + /** + * removeProc removes a proc and its associated tasks by + * setting this particular procID to null + * + * @param procID + */ + public synchronized void removeProc(int procID) { + procList.set(procID, null); + } // Observer interface public void addedTo(Object observable) { hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-02-21 22:20 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=20080221222020.1651.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: linkBe 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).