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