From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32407 invoked by alias); 26 Feb 2008 21:30:36 -0000 Received: (qmail 32377 invoked by uid 367); 26 Feb 2008 21:30:34 -0000 Date: Tue, 26 Feb 2008 21:30:00 -0000 Message-ID: <20080226213034.32363.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Implement dead refresh methods. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: b9720029b5f6033a9b07693a5b9d019eee9aeb71 X-Git-Newrev: 5bc808038eac8877ac2e663061335073eb0d19bc 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/msg00254.txt.bz2 The branch, master has been updated via 5bc808038eac8877ac2e663061335073eb0d19bc (commit) via 9d5ed80b57b33c7d24dab9c19ad708e3476e9c37 (commit) from b9720029b5f6033a9b07693a5b9d019eee9aeb71 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 5bc808038eac8877ac2e663061335073eb0d19bc Author: Andrew Cagney Date: Tue Feb 26 16:30:00 2008 -0500 Implement dead refresh methods. frysk-core/frysk/hpd/ChangeLog 2008-02-26 Andrew Cagney * CoreCommand.java: Update to match LinuxCoreFactory. frysk-core/frysk/proc/dead/ChangeLog 2008-02-26 Andrew Cagney * TestLinuxExe.java (testRequestProc()): New. (testRequestProc()): New. * DeadHost.java (getProc()): New; abstract. (requestProc(int,FindProc)): Use. (requestRefresh(Collection,HostRefreshBuilder)): Implement. * LinuxExeHost.java: Update. * LinuxCoreHost.java: Update. * LinuxCoreFactory.java: Update. * LinuxExeFactory.java: Update. commit 9d5ed80b57b33c7d24dab9c19ad708e3476e9c37 Author: Andrew Cagney Date: Tue Feb 26 16:11:37 2008 -0500 frysk-core/frysk/proc/ChangeLog 2008-02-26 Andrew Cagney * Host.java (getSoleProcFIXME()): Delete. frysk-core/frysk/util/ChangeLog 2008-02-26 Andrew Cagney * Util.java (getProcFromExeFile(Host)): Delete. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/hpd/ChangeLog | 2 + frysk-core/frysk/hpd/CoreCommand.java | 7 ++-- frysk-core/frysk/proc/ChangeLog | 2 + frysk-core/frysk/proc/Host.java | 16 -------- frysk-core/frysk/proc/dead/ChangeLog | 10 +++++ frysk-core/frysk/proc/dead/DeadHost.java | 41 +++++++++++++++------- frysk-core/frysk/proc/dead/LinuxCoreFactory.java | 8 ++-- frysk-core/frysk/proc/dead/LinuxCoreHost.java | 2 +- frysk-core/frysk/proc/dead/LinuxExeFactory.java | 4 +- frysk-core/frysk/proc/dead/LinuxExeHost.java | 2 +- frysk-core/frysk/proc/dead/TestLinuxExe.java | 36 ++++++++++++++++++- frysk-core/frysk/util/ChangeLog | 2 + frysk-core/frysk/util/Util.java | 13 ------- 13 files changed, 90 insertions(+), 55 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog index 4f2a902..6453b60 100644 --- a/frysk-core/frysk/hpd/ChangeLog +++ b/frysk-core/frysk/hpd/ChangeLog @@ -1,5 +1,7 @@ 2008-02-26 Andrew Cagney + * CoreCommand.java: Update to match LinuxCoreFactory. + * LoadCommand.java: Update to match LinuxExeFactory. 2008-02-25 Rick Moseley diff --git a/frysk-core/frysk/hpd/CoreCommand.java b/frysk-core/frysk/hpd/CoreCommand.java index f7dbfc0..d40653a 100644 --- a/frysk-core/frysk/hpd/CoreCommand.java +++ b/frysk-core/frysk/hpd/CoreCommand.java @@ -50,7 +50,7 @@ import frysk.dwfl.DwflCache; import frysk.proc.Task; import frysk.proc.dead.LinuxCoreFactory; import java.io.IOException; -import frysk.proc.dead.LinuxCoreProc; +import frysk.proc.Proc; public class CoreCommand extends ParameterizedCommand { @@ -113,9 +113,8 @@ public class CoreCommand extends ParameterizedCommand { } // Build Core. Move any exceptions up to cli and print to user. - LinuxCoreProc coreProc - = LinuxCoreFactory.createProc(coreFile, exeFile, - options.loadMetaData); + Proc coreProc = LinuxCoreFactory.createProc(coreFile, exeFile, + options.loadMetaData); // All checks are done. Host is built. Now start reserving // space in the sets. diff --git a/frysk-core/frysk/proc/ChangeLog b/frysk-core/frysk/proc/ChangeLog index cf89fb9..85b3c53 100644 --- a/frysk-core/frysk/proc/ChangeLog +++ b/frysk-core/frysk/proc/ChangeLog @@ -1,5 +1,7 @@ 2008-02-26 Andrew Cagney + * Host.java (getSoleProcFIXME()): Delete. + * ProcBlockAction.java: Use LinuxCoreFactory. 2008-02-20 Phil Muldoon diff --git a/frysk-core/frysk/proc/Host.java b/frysk-core/frysk/proc/Host.java index 7aff0a1..2d32cc6 100644 --- a/frysk-core/frysk/proc/Host.java +++ b/frysk-core/frysk/proc/Host.java @@ -109,22 +109,6 @@ public abstract class Host implements Comparable { logger.log(Level.FINE, "{0} getProc ProcId {1} \n", new Object[] {this, id}); return (Proc) procPool.get(id); } - /** - * Assuming that this host has only one proc; return it; this is - * used by the EXE and CORE targets - * - * FIXME: This should this be replaced by methods to "request a - * core" and "request a proc". - */ - public Proc getSoleProcFIXME() { - switch (procPool.size()) { - case 1: - return (Proc) procPool.values().iterator().next(); - default: - return null; - } - } - /** * Find a specifc process from its Id. diff --git a/frysk-core/frysk/proc/dead/ChangeLog b/frysk-core/frysk/proc/dead/ChangeLog index 9f6b5ef..0498f3e 100644 --- a/frysk-core/frysk/proc/dead/ChangeLog +++ b/frysk-core/frysk/proc/dead/ChangeLog @@ -1,5 +1,15 @@ 2008-02-26 Andrew Cagney + * TestLinuxExe.java (testRequestProc()): New. + (testRequestProc()): New. + * DeadHost.java (getProc()): New; abstract. + (requestProc(int,FindProc)): Use. + (requestRefresh(Collection,HostRefreshBuilder)): Implement. + * LinuxExeHost.java: Update. + * LinuxCoreHost.java: Update. + * LinuxCoreFactory.java: Update. + * LinuxExeFactory.java: Update. + * LinuxExeFactory.java (createProc(File,String[])): Replace createProc(EventLoop,File,String[]). (createProc(String[])): New. diff --git a/frysk-core/frysk/proc/dead/DeadHost.java b/frysk-core/frysk/proc/dead/DeadHost.java index 127a735..4dd789c 100644 --- a/frysk-core/frysk/proc/dead/DeadHost.java +++ b/frysk-core/frysk/proc/dead/DeadHost.java @@ -40,10 +40,10 @@ package frysk.proc.dead; import frysk.proc.Host; +import java.util.HashSet; import frysk.proc.TaskObserver.Attached; import frysk.proc.Proc; import frysk.proc.Manager; -import frysk.proc.ProcId; import frysk.proc.FindProc; import frysk.proc.HostRefreshBuilder; import frysk.event.Event; @@ -61,29 +61,44 @@ abstract class DeadHost extends Host { Attached attached) { throw new RuntimeException("requestCreateAttachedProc"); } - public void requestRefresh(Collection knownProcesses, - HostRefreshBuilder builder) { - // Ignore for now; should call back with the known processes - // (all one of them) for this dead host + public void requestRefresh(final Collection theKnownProcesses, + final HostRefreshBuilder theBuilder) { + Manager.eventLoop.add(new Event() { + private final Collection knownProcesses = theKnownProcesses; + private final HostRefreshBuilder builder = theBuilder; + public void execute() { + Proc proc = getProc(); + if (knownProcesses.contains(proc)) { + builder.construct(new HashSet(), new HashSet()); + } else { + HashSet added = new HashSet(); + added.add(proc); + builder.construct(added, new HashSet()); + } + } + }); } public Proc getSelf() { throw new RuntimeException("getSelf"); } - // FIXME: Should be able to just return the sole process (after - // validating that it is what was requested). - public void requestProc(final int theProcId, final FindProc theFinder) { + /** + * Return the sole process bound to the dead host. + */ + abstract DeadProc getProc(); + + public void requestProc(final int thePid, final FindProc theFinder) { Manager.eventLoop.add(new Event() { // Avoid implicit variables; gcj bug. - private final int procId = theProcId; + private final int pid = thePid; private final FindProc finder = theFinder; public void execute() { - Proc proc = getProc(new ProcId(procId)); - if (proc == null) { - finder.procNotFound(procId); - } else { + Proc proc = getProc(); + if (proc.getPid() == pid) { finder.procFound(proc); + } else { + finder.procNotFound(pid); } } }); diff --git a/frysk-core/frysk/proc/dead/LinuxCoreFactory.java b/frysk-core/frysk/proc/dead/LinuxCoreFactory.java index e291cf8..c663d6f 100644 --- a/frysk-core/frysk/proc/dead/LinuxCoreFactory.java +++ b/frysk-core/frysk/proc/dead/LinuxCoreFactory.java @@ -54,8 +54,8 @@ public class LinuxCoreFactory { * * All File paths must be canonical. */ - public static LinuxCoreProc createProc(File coreFile, File exeFile, - boolean extendedMetaData) { + public static DeadProc createProc(File coreFile, File exeFile, + boolean extendedMetaData) { LinuxCoreInfo core = new LinuxCoreInfo(coreFile, exeFile, extendedMetaData); LinuxCoreHost host = new LinuxCoreHost(core); @@ -66,7 +66,7 @@ public class LinuxCoreFactory { * * All File paths must be canonical. */ - public static LinuxCoreProc createProc(File coreFile) { + public static DeadProc createProc(File coreFile) { return createProc(coreFile, null, false); } /** @@ -75,7 +75,7 @@ public class LinuxCoreFactory { * * All File paths must be canonical. */ - public static LinuxCoreProc createProc(File coreFile, File exeFile) { + public static DeadProc createProc(File coreFile, File exeFile) { return createProc(coreFile, exeFile, true); } } diff --git a/frysk-core/frysk/proc/dead/LinuxCoreHost.java b/frysk-core/frysk/proc/dead/LinuxCoreHost.java index 1807ec1..43749cb 100644 --- a/frysk-core/frysk/proc/dead/LinuxCoreHost.java +++ b/frysk-core/frysk/proc/dead/LinuxCoreHost.java @@ -54,7 +54,7 @@ public class LinuxCoreHost extends DeadHost { proc = new LinuxCoreProc(this, info); } - LinuxCoreProc getProc() { + DeadProc getProc() { return proc; } public String getName() { diff --git a/frysk-core/frysk/proc/dead/LinuxExeFactory.java b/frysk-core/frysk/proc/dead/LinuxExeFactory.java index 3165f4f..a5a1308 100644 --- a/frysk-core/frysk/proc/dead/LinuxExeFactory.java +++ b/frysk-core/frysk/proc/dead/LinuxExeFactory.java @@ -48,7 +48,7 @@ import lib.dwfl.ElfEHeader; import frysk.proc.MemoryMap; public class LinuxExeFactory { - public static LinuxExeProc createProc(final File exeFile, + public static DeadProc createProc(final File exeFile, String[] args) { Elf exeElf = null; try { @@ -84,7 +84,7 @@ public class LinuxExeFactory { } } - public static LinuxExeProc createProc(String[] args) { + public static DeadProc createProc(String[] args) { return createProc(new File(args[0]), args); } } diff --git a/frysk-core/frysk/proc/dead/LinuxExeHost.java b/frysk-core/frysk/proc/dead/LinuxExeHost.java index a9932e0..94e7fd7 100644 --- a/frysk-core/frysk/proc/dead/LinuxExeHost.java +++ b/frysk-core/frysk/proc/dead/LinuxExeHost.java @@ -57,7 +57,7 @@ public class LinuxExeHost extends DeadHost { return exeFile.getName(); } - LinuxExeProc getProc() { + DeadProc getProc() { return proc; } } diff --git a/frysk-core/frysk/proc/dead/TestLinuxExe.java b/frysk-core/frysk/proc/dead/TestLinuxExe.java index 8219926..fb3dda1 100644 --- a/frysk-core/frysk/proc/dead/TestLinuxExe.java +++ b/frysk-core/frysk/proc/dead/TestLinuxExe.java @@ -41,8 +41,12 @@ package frysk.proc.dead; import frysk.Config; import inua.eio.ByteBuffer; - +import java.util.HashSet; +import frysk.proc.FindProc; +import java.util.Collection; +import frysk.proc.HostRefreshBuilder; import frysk.proc.Task; +import frysk.proc.Manager; import frysk.proc.Proc; import frysk.testbed.TestLib; @@ -69,4 +73,34 @@ public class TestLinuxExe extends TestLib { assertEquals("Peek a byte at 0x080497dc", (byte) 0xFF, buffer.getUByte()); assertEquals("Peek a byte at 0x080497dd", (byte) 0xFF, buffer.getUByte()); } + + public void testRequestRefresh() { + final Proc proc + = LinuxExeFactory.createProc(Config.getPkgDataFile("test-exe-x86"), + new String[0]); + proc.getHost().requestRefresh(new HashSet(), new HostRefreshBuilder() { + public void construct(Collection added, Collection removed) { + assertTrue("added contains proc", added.contains(proc)); + assertFalse("removed contains proc", removed.contains(proc)); + Manager.eventLoop.requestStop(); + } + }); + assertRunUntilStop("find proc"); + } + + public void testRequestProc() { + final Proc proc + = LinuxExeFactory.createProc(Config.getPkgDataFile("test-exe-x86"), + new String[0]); + proc.getHost().requestProc(proc.getPid(), new FindProc() { + public void procFound(Proc found) { + assertEquals("found proc", proc, found); + Manager.eventLoop.requestStop(); + } + public void procNotFound(int pid) { + fail("proc not found"); + } + }); + assertRunUntilStop("find proc"); + } } diff --git a/frysk-core/frysk/util/ChangeLog b/frysk-core/frysk/util/ChangeLog index 0e3552a..9b3d0c9 100644 --- a/frysk-core/frysk/util/ChangeLog +++ b/frysk-core/frysk/util/ChangeLog @@ -1,5 +1,7 @@ 2008-02-26 Andrew Cagney + * Util.java (getProcFromExeFile(Host)): Delete. + * CommandlineParser.java parseCommandFIXME(String[]): Replace parseCommand(String[]). (parseCommand(Proc)): New. diff --git a/frysk-core/frysk/util/Util.java b/frysk-core/frysk/util/Util.java index bcde440..0bcce53 100644 --- a/frysk-core/frysk/util/Util.java +++ b/frysk-core/frysk/util/Util.java @@ -41,7 +41,6 @@ package frysk.util; import gnu.classpath.tools.getopt.OptionException; import java.io.File; -import frysk.proc.Host; import frysk.proc.FindProc; import frysk.proc.Manager; import frysk.proc.dead.LinuxCoreFactory; @@ -102,16 +101,4 @@ public class Util throw new OptionException("Process " + pid + " not found"); return finder.proc; } - - /** - * Return the Proc associated with an executable File. - * @param exeHost the Host associated with the desired Proc. - * @return The Proc for the given executable File. - */ - public static Proc getProcFromExeFile(Host exeHost) { - Proc proc = exeHost.getSoleProcFIXME(); - if (proc == null) - throw new RuntimeException("Cannot find a process in this executable."); - return proc; - } } hooks/post-receive -- frysk system monitor/debugger