From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16942 invoked by alias); 25 Mar 2008 17:23:56 -0000 Received: (qmail 16913 invoked by uid 9561); 25 Mar 2008 17:23:54 -0000 Date: Tue, 25 Mar 2008 17:23:00 -0000 Message-ID: <20080325172354.16898.qmail@sourceware.org> From: swagiaal@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: swagiaal: Reimplemented ProcFollowUtil based on ProcRunUtil. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 85c95cef4f9c593478eae091cfd4230895da8687 X-Git-Newrev: fb7760cc23ce26340eb92fd3a1b836d16c0eb357 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q1/txt/msg00422.txt.bz2 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 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 + + Reimplemented ProcFollowUtil based on ProcRunUtil. + * ferror.java: Updated. + frysk-core/frysk/util/ChangeLog +2008-03-25 Sami Wagiaalla + + * 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 + + Reimplemented ProcFollowUtil based on ProcRunUtil. + * ferror.java: Updated. + 2008-03-20 Sami Wagiaalla * 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 + + * ProcRunUtil.java: Updated commnets + Fixed fork problem. + * ProcFollowUtil.java: Reimplemented based on ProcRunUtil. + * FCatch.java: Updated + 2008-03-20 Sami Wagiaalla * 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