public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: swagiaal@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: swagiaal: Reimplemented ProcFollowUtil based on ProcRunUtil.
Date: Tue, 25 Mar 2008 17:23:00 -0000	[thread overview]
Message-ID: <20080325172354.16898.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  fb7760cc23ce26340eb92fd3a1b836d16c0eb357 (commit)
      from  85c95cef4f9c593478eae091cfd4230895da8687 (commit)

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

- Log -----------------------------------------------------------------
commit fb7760cc23ce26340eb92fd3a1b836d16c0eb357
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Tue Mar 25 13:22:56 2008 -0400

    swagiaal: Reimplemented ProcFollowUtil based on ProcRunUtil.
    
    frysk-core/frysk/bindir/ChangeLog
    +2008-03-25  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	Reimplemented ProcFollowUtil based on ProcRunUtil.
    +	* ferror.java: Updated.
    +
    
    frysk-core/frysk/util/ChangeLog
    +2008-03-25  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* ProcRunUtil.java: Updated commnets
    +	Fixed fork problem.
    +	* ProcFollowUtil.java: Reimplemented based on ProcRunUtil.
    +	* FCatch.java: Updated
    +

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

Summary of changes:
 frysk-core/frysk/bindir/ChangeLog         |    5 +
 frysk-core/frysk/bindir/ferror.java       |   15 +-
 frysk-core/frysk/util/ChangeLog           |    7 +
 frysk-core/frysk/util/FCatch.java         |    5 +-
 frysk-core/frysk/util/ProcFollowUtil.java |  206 +++++++++--------------------
 frysk-core/frysk/util/ProcRunUtil.java    |   12 +-
 6 files changed, 90 insertions(+), 160 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/bindir/ChangeLog b/frysk-core/frysk/bindir/ChangeLog
index abbd05e..64cf1f6 100644
--- a/frysk-core/frysk/bindir/ChangeLog
+++ b/frysk-core/frysk/bindir/ChangeLog
@@ -1,3 +1,8 @@
+2008-03-25  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	Reimplemented ProcFollowUtil based on ProcRunUtil.
+	* ferror.java: Updated.
+
 2008-03-20  Sami Wagiaalla  <swagiaal@redhat.com> 
 
 	* fstep.java: Use ProcRunUtil.
diff --git a/frysk-core/frysk/bindir/ferror.java b/frysk-core/frysk/bindir/ferror.java
index 9800e7a..0ba5a85 100644
--- a/frysk-core/frysk/bindir/ferror.java
+++ b/frysk-core/frysk/bindir/ferror.java
@@ -39,6 +39,10 @@
 
 package frysk.bindir;
 
+import java.io.PrintWriter;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import frysk.debuginfo.PrintStackOptions;
 import frysk.isa.syscalls.Syscall;
 import frysk.proc.Action;
@@ -46,14 +50,11 @@ import frysk.proc.Task;
 import frysk.proc.TaskObserver;
 import frysk.proc.TaskObserver.Syscalls;
 import frysk.util.ProcFollowUtil;
+import frysk.util.ProcRunUtil;
+import frysk.util.StackPrintUtil;
 import gnu.classpath.tools.getopt.Option;
-import gnu.classpath.tools.getopt.OptionGroup;
 import gnu.classpath.tools.getopt.OptionException;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import frysk.util.StackPrintUtil;
-
-import java.io.PrintWriter;
+import gnu.classpath.tools.getopt.OptionGroup;
 
 public class ferror {
     
@@ -87,7 +88,7 @@ public class ferror {
 			    args, 
 			    new TaskObserver[]{ syscallObserver },
 			    options(),
-			    ProcFollowUtil.DEFAULT);
+			    ProcRunUtil.DEFAULT);
 	procRunningUtil.start();
     }
 
diff --git a/frysk-core/frysk/util/ChangeLog b/frysk-core/frysk/util/ChangeLog
index 9074d17..8c4fba2 100644
--- a/frysk-core/frysk/util/ChangeLog
+++ b/frysk-core/frysk/util/ChangeLog
@@ -1,3 +1,10 @@
+2008-03-25  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* ProcRunUtil.java: Updated commnets
+	Fixed fork problem.
+	* ProcFollowUtil.java: Reimplemented based on ProcRunUtil.
+	* FCatch.java: Updated
+
 2008-03-20  Sami Wagiaalla  <swagiaal@redhat.com> 
 
 	* ProcRunUtil.java: Reimplemented with rich client notification.
diff --git a/frysk-core/frysk/util/FCatch.java b/frysk-core/frysk/util/FCatch.java
index a5acafb..476ffe8 100644
--- a/frysk-core/frysk/util/FCatch.java
+++ b/frysk-core/frysk/util/FCatch.java
@@ -41,14 +41,15 @@ package frysk.util;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import gnu.classpath.tools.getopt.OptionGroup;
 import java.util.HashMap;
+
 import frysk.debuginfo.PrintStackOptions;
 import frysk.isa.signals.Signal;
 import frysk.proc.Action;
 import frysk.proc.Task;
 import frysk.proc.TaskObserver;
 import frysk.rsl.Log;
+import gnu.classpath.tools.getopt.OptionGroup;
 
 public class FCatch {
     private static final Log fine = Log.fine(FCatch.class);
@@ -142,7 +143,7 @@ public class FCatch {
 	    = new ProcFollowUtil("fcatch",
 			      "Usage: fcatch [OPTIONS] -- PATH ARGS || fcatch [OPTIONS] PID",
 			      args, new TaskObserver[] { catchObserver},
-			      options(), ProcFollowUtil.DEFAULT);
+			      options(), ProcRunUtil.DEFAULT);
 	procRunUtil.start();
     }
 }
diff --git a/frysk-core/frysk/util/ProcFollowUtil.java b/frysk-core/frysk/util/ProcFollowUtil.java
index f2888df..10c0356 100644
--- a/frysk-core/frysk/util/ProcFollowUtil.java
+++ b/frysk-core/frysk/util/ProcFollowUtil.java
@@ -40,13 +40,9 @@
 package frysk.util;
 
 import java.util.HashSet;
-import java.util.Set;
 
+import frysk.isa.signals.Signal;
 import frysk.proc.Action;
-import frysk.proc.Manager;
-import frysk.proc.Proc;
-import frysk.proc.ProcTasksAction;
-import frysk.proc.ProcTasksObserver;
 import frysk.proc.Task;
 import frysk.proc.TaskAttachedObserverXXX;
 import frysk.proc.TaskObserver;
@@ -58,166 +54,42 @@ import frysk.proc.TaskObserver.Signaled;
 import frysk.proc.TaskObserver.Syscalls;
 import frysk.proc.TaskObserver.Terminated;
 import frysk.proc.TaskObserver.Terminating;
+import frysk.util.ProcRunUtil.ProcRunObserver;
+import frysk.util.ProcRunUtil.RunUtilOptions;
 import gnu.classpath.tools.getopt.OptionGroup;
 
-/**
- * Framework to be used for frysk utilities that, a) Accept pids, executable
- * paths, core files & b) Require tasks to be stopped,
- * 
- * Utilities must define a event.ProcEvent to execute.
- */
+
 public class ProcFollowUtil {
 
     private final HashSet knownTasks = new HashSet();
-    
-    ForkedObserver forkedObserver = new ForkedObserver();
-
-    AttachedObserver attachedObserver = new AttachedObserver();
-
-    private RunningUtilOptions options;
+ 
     private TaskObserver[] observers;
 
-    private NewTaskObserver newTaskObserver;
-
-    public static interface NewTaskObserver{
-	void notifyNewTask(Task task);
-    }
-    
-    public static class RunningUtilOptions {
-	boolean followForks = true;
-    }
-    
-    public static final RunningUtilOptions DEFAULT = new RunningUtilOptions();
-
-    public ProcFollowUtil(String utilName, String usage, String[] args,
-		       NewTaskObserver newTaskObserver,
-		       OptionGroup[] customOptions,
-		       RunningUtilOptions options) {
-	this(utilName, usage, args, new TaskObserver[]{}, customOptions,
-	     options);
-	this.newTaskObserver = newTaskObserver;
-    }
-    
+    ProcRunUtil procRunUtil;
     public ProcFollowUtil(String utilName, String usage, String[] args,
 		       TaskObserver[] observers, OptionGroup[] customOptions,
-		       RunningUtilOptions options) {
-	this.options = options;
-	this.observers = observers;
-
-	//Set up commandline parser
-	CommandlineParser parser = new CommandlineParser(utilName,
-							 customOptions) {
-		// @Override
-		public void parsePids(Proc[] procs) {
-		    for (int i = 0; i < procs.length; i++) {
-			addObservers(procs[i]);
-		    }
-		}
-		// @Override
-		public void parseCommand(Proc command) {
-		    Manager.host.requestCreateAttachedProc(command, attachedObserver);
-		}
-	    };
-	parser.parse(args);
+		       RunUtilOptions options) {
+	
+      this.procRunUtil = new ProcRunUtil(utilName,
+            usage,
+            args,
+            procRunObserver,
+            customOptions,
+            options
+      );
+	
+      this.observers = observers;
     }
 
-    private void addObservers(Proc proc) {
-	new ProcTasksAction(proc, tasksObserver);
-    }
-    
     private void addObservers(Task task) {
 	if (knownTasks.add(task)) {
 	    
-	    if(newTaskObserver != null){
-		newTaskObserver.notifyNewTask(task);
-	    }
-	    
 	    for (int i = 0; i < observers.length; i++) {
 		this.addTaskObserver(observers[i], task);
 	    }
-	    if (options.followForks) {
-		this.addTaskObserver(forkedObserver, task);
-	    }
 	}
     }
     
-    class ForkedObserver implements TaskObserver.Forked {
-	public Action updateForkedOffspring(Task parent, Task offspring) {
-	    addObservers(offspring.getProc());
-	    return Action.BLOCK;
-	}
-
-	public Action updateForkedParent(Task parent, Task offspring) {
-	    return Action.CONTINUE;
-	}
-
-	public void addFailed(Object observable, Throwable w) {
-	}
-
-	public void addedTo(Object observable) {
-	}
-
-	public void deletedFrom(Object observable) {
-	}
-    }
-
-    class AttachedObserver implements TaskAttachedObserverXXX {
-	private Set procs = new HashSet();
-
-	public synchronized Action updateAttached(Task task) {
-	    
-	    Proc proc = task.getProc();
-	    if (!procs.contains(proc)) {
-		procs.add(proc);
-		addObservers(proc);
-	    }
-	    
-	    return Action.BLOCK;
-	}
-
-	public void addedTo(Object observable) {
-	}
-
-	public void deletedFrom(Object observable) {
-	}
-
-	public void addFailed(Object observable, Throwable w) {
-	    throw new RuntimeException("Failed to attach to created proc", w);
-	}
-    }
-    
-    private ProcTasksObserver tasksObserver = new ProcTasksObserver() {
-	public void existingTask (Task task)
-	{
-	    addObservers(task);
-
-	    if (task == task.getProc().getMainTask()) {
-		// Unblock forked and cloned observer, which blocks
-		// main task after the fork or clone, to give us a
-		// chance to pick it up.
-		task.requestUnblock(forkedObserver);
-		task.requestUnblock(attachedObserver);
-		
-	    }
-	}
-
-	public void taskAdded (Task task)
-	{
-	    addObservers(task);
-	}
-
-	public void taskRemoved (Task task)
-	{
-	    knownTasks.remove(task);
-	    if(knownTasks.size() == 0){
-		Manager.eventLoop.requestStop();
-	    }
-	}
-
-	public void addedTo (Object observable)	{}
-	public void addFailed (Object observable, Throwable arg1) {}
-	public void deletedFrom (Object observable) {}
-    };
 
     //XXX: this is to handle adding observers according to their types
     //     since task does not provide overloaded functions for adding
@@ -267,7 +139,49 @@ public class ProcFollowUtil {
 	}
     }
 
+    private ProcRunObserver procRunObserver = new ProcRunObserver(){
+
+      public Action updateAttached (Task task)
+      {
+	addObservers(task);
+	return Action.CONTINUE;
+      }
+
+      public Action updateForkedOffspring (Task parent, Task offspring){
+	  System.out.println(".updateForkedOffspring()");
+	  System.out.println(".updateForkedOffspring()");
+	  System.out.println(".updateForkedOffspring()");
+	  
+	addObservers(offspring);
+	offspring.requestUnblock(this);
+	return Action.BLOCK;
+      }
+
+      public void existingTask (Task task)
+      {
+	addObservers(task);
+      }
+
+      public Action updateClonedOffspring (Task parent, Task offspring){
+	addObservers(offspring);
+	return Action.CONTINUE;
+      }
+
+      public Action updateForkedParent (Task parent, Task offspring){return Action.CONTINUE;}
+      public Action updateExeced (Task task){return Action.CONTINUE;}
+      public Action updateClonedParent (Task task, Task clone){return Action.CONTINUE;}
+      public Action updateTerminated (Task task, Signal signal, int value){ return Action.CONTINUE;}
+      
+      public void taskAdded (Task task){}
+      public void taskRemoved (Task task){}
+
+      public void addFailed (Object observable, Throwable w){}
+      public void addedTo (Object observable){}
+      public void deletedFrom (Object observable){}
+      
+    };
+    
     public void start() {
-	Manager.eventLoop.run();
+	procRunUtil.start();
     }
 }
diff --git a/frysk-core/frysk/util/ProcRunUtil.java b/frysk-core/frysk/util/ProcRunUtil.java
index 0163b4b..c7ec76e 100644
--- a/frysk-core/frysk/util/ProcRunUtil.java
+++ b/frysk-core/frysk/util/ProcRunUtil.java
@@ -52,10 +52,10 @@ import frysk.proc.TaskObserver;
 import gnu.classpath.tools.getopt.OptionGroup;
 
 /**
- * Framework to be used for frysk utilities that, a) Accept pids, executable
- * paths, core files & b) Require tasks to be stopped,
+ * Framework to be used for frysk utilities which analyze running
+ * processes. 
  * 
- * Utilities must define a event.ProcEvent to execute.
+ * Utilities must implement {@link ProcRunObserver} to use.
  */
 public class ProcRunUtil {
 
@@ -117,7 +117,7 @@ public class ProcRunUtil {
 	if (knownTasks.add(task)) {
 	    task.requestAddClonedObserver(procRunObserver);
 	    task.requestAddExecedObserver(procRunObserver);
-	    task.requestAddForkedObserver(forkedObserver);
+	    task.requestAddForkedObserver(procRunObserver);
 	    task.requestAddTerminatedObserver(procRunObserver);
 
 	    if (this.options.followForks) {
@@ -153,7 +153,9 @@ public class ProcRunUtil {
 	    procRunObserver.updateAttached(task);
 	    Proc proc = task.getProc();
 	    addObservers(proc);
-	    
+	    //XXX: the addObserver... requestUblock... return Action.Block
+	    //     does not work of the observer being added is a tasks
+	    //     observer... a concrete block and unblock must be done.
 	    return Action.BLOCK;
 	}
 


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


                 reply	other threads:[~2008-03-25 17:23 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=20080325172354.16898.qmail@sourceware.org \
    --to=swagiaal@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).