public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Fix ability to unload procs after loading.
@ 2008-02-21 22:20 rmoseley
  0 siblings, 0 replies; only message in thread
From: rmoseley @ 2008-02-21 22:20 UTC (permalink / raw)
  To: frysk-cvs

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-02-21 22:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-21 22:20 [SCM] master: Fix ability to unload procs after loading rmoseley

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