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