This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: swagiaal: Reimplemented ProcFollowUtil based on ProcRunUtil.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]