From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6956 invoked by alias); 11 Mar 2008 15:21:01 -0000 Received: (qmail 6924 invoked by uid 367); 11 Mar 2008 15:20:58 -0000 Date: Tue, 11 Mar 2008 15:21:00 -0000 Message-ID: <20080311152058.6909.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Add StopEventLoopWhenProcTerminates. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: c25d6b88f051607f5dfcab2c3f55fe295f872a09 X-Git-Newrev: f21c86aac743a2a3c201e78d8167b90e5791bd6d 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/msg00330.txt.bz2 The branch, master has been updated via f21c86aac743a2a3c201e78d8167b90e5791bd6d (commit) from c25d6b88f051607f5dfcab2c3f55fe295f872a09 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit f21c86aac743a2a3c201e78d8167b90e5791bd6d Author: Andrew Cagney Date: Tue Mar 11 11:19:08 2008 -0400 Add StopEventLoopWhenProcTerminates. frysk-core/frysk/isa/corefiles/ChangeLog 2008-03-11 Andrew Cagney * TestLinuxElfCorefile.java: Update to match Offspring. frysk-core/frysk/proc/ChangeLog 2008-03-11 Andrew Cagney * StressTestAbandon.java: Update to match Offspring. * TestProcTasksObserver.java: Ditto. * TestProcGet.java: Ditto. * TestProcForceDetach.java: Ditto. * TestMapGet.java: Ditto. * TestExec.java: Ditto. * TestAbandon.java: Ditto. * StressAttachDetachRapidlyCloningMainTask.java: Ditto. frysk-core/frysk/proc/live/ChangeLog 2008-03-11 Andrew Cagney * TestProcStopped.java: Update to match Offspring. * TestRuntimeIsa.java: Ditto. frysk-core/frysk/testbed/ChangeLog 2008-03-11 Andrew Cagney * TestLib.java (assertRunToFindProc(ProcessIdentifier)): New. * Offspring.java (assertRunToFindProc()): New. (assertFindProcAndTasks()): Delete. * StopEventLoopWhenProcTerminates.java: New. * TestStopEventLoopWhenProcTerminates.java: New. frysk-core/frysk/util/ChangeLog 2008-03-11 Andrew Cagney * StressTestStackTraceAction.java: Update to match Offspring. * TestStackTraceAction.java: Ditto. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/isa/corefiles/ChangeLog | 4 + .../frysk/isa/corefiles/TestLinuxElfCorefile.java | 2 +- frysk-core/frysk/proc/ChangeLog | 9 +++ .../StressAttachDetachRapidlyCloningMainTask.java | 2 +- frysk-core/frysk/proc/StressTestAbandon.java | 2 +- frysk-core/frysk/proc/TestAbandon.java | 6 +- frysk-core/frysk/proc/TestExec.java | 4 +- frysk-core/frysk/proc/TestMapGet.java | 2 +- frysk-core/frysk/proc/TestProcForceDetach.java | 2 +- frysk-core/frysk/proc/TestProcGet.java | 12 ++-- frysk-core/frysk/proc/TestProcTasksObserver.java | 12 ++-- frysk-core/frysk/proc/dead/TestLinuxCore.java | 2 +- frysk-core/frysk/proc/live/ChangeLog | 3 + frysk-core/frysk/proc/live/TestProcStopped.java | 4 +- frysk-core/frysk/proc/live/TestRuntimeIsa.java | 8 +- frysk-core/frysk/testbed/ChangeLog | 8 +++ frysk-core/frysk/testbed/Offspring.java | 24 +------- ...d.java => StopEventLoopWhenProcTerminates.java} | 60 ++++++++++---------- frysk-core/frysk/testbed/TestLib.java | 21 +++++++ ...va => TestStopEventLoopWhenProcTerminates.java} | 56 +++++++++++------- frysk-core/frysk/util/ChangeLog | 5 ++ .../frysk/util/StressTestStackTraceAction.java | 2 +- frysk-core/frysk/util/TestStackTraceAction.java | 2 +- 23 files changed, 151 insertions(+), 101 deletions(-) copy frysk-core/frysk/testbed/{StopEventLoopWhenProcRemoved.java => StopEventLoopWhenProcTerminates.java} (68%) copy frysk-core/frysk/testbed/{IsaTestbed.java => TestStopEventLoopWhenProcTerminates.java} (60%) First 500 lines of diff: diff --git a/frysk-core/frysk/isa/corefiles/ChangeLog b/frysk-core/frysk/isa/corefiles/ChangeLog index 790d374..bb8140c 100644 --- a/frysk-core/frysk/isa/corefiles/ChangeLog +++ b/frysk-core/frysk/isa/corefiles/ChangeLog @@ -1,3 +1,7 @@ +2008-03-11 Andrew Cagney + + * TestLinuxElfCorefile.java: Update to match Offspring. + 2008-02-28 Phil Muldoon * TestLinuxElfCorefile.java (constructStackOnlyCore): Delete. diff --git a/frysk-core/frysk/isa/corefiles/TestLinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/TestLinuxElfCorefile.java index b3500e3..ea6e64c 100644 --- a/frysk-core/frysk/isa/corefiles/TestLinuxElfCorefile.java +++ b/frysk-core/frysk/isa/corefiles/TestLinuxElfCorefile.java @@ -323,7 +323,7 @@ public class TestLinuxElfCorefile { SlaveOffspring ackProc = SlaveOffspring.createDaemon(); assertNotNull(ackProc); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); assertNotNull(proc); return proc; } diff --git a/frysk-core/frysk/proc/ChangeLog b/frysk-core/frysk/proc/ChangeLog index 96d84d5..3e6df24 100644 --- a/frysk-core/frysk/proc/ChangeLog +++ b/frysk-core/frysk/proc/ChangeLog @@ -1,5 +1,14 @@ 2008-03-11 Andrew Cagney + * StressTestAbandon.java: Update to match Offspring. + * TestProcTasksObserver.java: Ditto. + * TestProcGet.java: Ditto. + * TestProcForceDetach.java: Ditto. + * TestMapGet.java: Ditto. + * TestExec.java: Ditto. + * TestAbandon.java: Ditto. + * StressAttachDetachRapidlyCloningMainTask.java: Ditto. + * TestMemory.java: Delete. * SyscallExaminer.java: Delete. diff --git a/frysk-core/frysk/proc/StressAttachDetachRapidlyCloningMainTask.java b/frysk-core/frysk/proc/StressAttachDetachRapidlyCloningMainTask.java index 5513e2b..c46019e 100644 --- a/frysk-core/frysk/proc/StressAttachDetachRapidlyCloningMainTask.java +++ b/frysk-core/frysk/proc/StressAttachDetachRapidlyCloningMainTask.java @@ -63,7 +63,7 @@ public class StressAttachDetachRapidlyCloningMainTask final int timeout = 20; - final Proc proc = new FunitThreadsOffspring(1000).assertFindProcAndTasks(); + final Proc proc = new FunitThreadsOffspring(1000).assertRunToFindProc(); // Create a list of tasks. Since the above is constantly // creating new tasks (with the old ones exiting) it is almost diff --git a/frysk-core/frysk/proc/StressTestAbandon.java b/frysk-core/frysk/proc/StressTestAbandon.java index 3c535af..0e71254 100644 --- a/frysk-core/frysk/proc/StressTestAbandon.java +++ b/frysk-core/frysk/proc/StressTestAbandon.java @@ -85,7 +85,7 @@ public class StressTestAbandon public void testStressAbandon () { Proc proc = SlaveOffspring.createDaemon() .assertSendAddClonesWaitForAcks(99) - .assertFindProcAndTasks(); + .assertRunToFindProc(); new ProcBlockAction(proc, new Action(proc)); assertRunUntilStop("testStressAbandon"); } diff --git a/frysk-core/frysk/proc/TestAbandon.java b/frysk-core/frysk/proc/TestAbandon.java index c24e89b..5252525 100644 --- a/frysk-core/frysk/proc/TestAbandon.java +++ b/frysk-core/frysk/proc/TestAbandon.java @@ -213,7 +213,7 @@ public class TestAbandon ackProc.findTaskUsingRefresh(true).requestAddInstructionObserver( testObserver); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); proc.getMainTask().requestDeleteInstructionObserver(testObserver); proc.requestAbandonAndRunEvent(new RequestStopEvent(Manager.eventLoop)); @@ -324,7 +324,7 @@ public class TestAbandon ackProc.findTaskUsingRefresh(true).requestAddInstructionObserver( testObserver); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); proc.requestAbandonAndRunEvent(new RequestStopEvent(Manager.eventLoop)); @@ -342,7 +342,7 @@ public class TestAbandon ackProc.findTaskUsingRefresh(true).requestAddInstructionObserver( testObserver); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); proc.requestAbandonAndRunEvent(new RequestStopEvent(Manager.eventLoop)); diff --git a/frysk-core/frysk/proc/TestExec.java b/frysk-core/frysk/proc/TestExec.java index f7b6e25..e7355a6 100644 --- a/frysk-core/frysk/proc/TestExec.java +++ b/frysk-core/frysk/proc/TestExec.java @@ -245,7 +245,7 @@ public class TestExec // loop is kept running until ExecParentObserver .addedTo is // called indicating that the attach succeeded. ExecParentObserver execParentObserver = new ExecParentObserver(); - Proc proc = child.assertFindProcAndTasks(); + Proc proc = child.assertRunToFindProc(); Task task = child.findTaskUsingRefresh(true); task.requestAddExecedObserver(execParentObserver); assertRunUntilStop("adding exec observer causing attach"); @@ -301,7 +301,7 @@ public class TestExec ExecCommand alias = new ExecCommand(ExecCommand.Executable.ALIAS); ExecOffspring child = new ExecOffspring (new ExecCommand(1 /* one thread */, alias)); - Proc proc = child.assertFindProcAndTasks(); + Proc proc = child.assertRunToFindProc(); // Attach to the process using the exec observer. The event // loop is kept running until execObserverParent .addedTo is diff --git a/frysk-core/frysk/proc/TestMapGet.java b/frysk-core/frysk/proc/TestMapGet.java index 0199600..9706fb0 100644 --- a/frysk-core/frysk/proc/TestMapGet.java +++ b/frysk-core/frysk/proc/TestMapGet.java @@ -123,7 +123,7 @@ public class TestMapGet { SlaveOffspring ackProc = SlaveOffspring.createChild(); assertNotNull(ackProc); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); assertNotNull(proc); return proc; } diff --git a/frysk-core/frysk/proc/TestProcForceDetach.java b/frysk-core/frysk/proc/TestProcForceDetach.java index b9c9e9e..8578c73 100644 --- a/frysk-core/frysk/proc/TestProcForceDetach.java +++ b/frysk-core/frysk/proc/TestProcForceDetach.java @@ -50,7 +50,7 @@ public class TestProcForceDetach public void requestRemove(SlaveOffspring ackProc, int count) { - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); new ProcBlockAction(proc, new MyProcBlockAction(proc)); assertRunUntilStop("test"); } diff --git a/frysk-core/frysk/proc/TestProcGet.java b/frysk-core/frysk/proc/TestProcGet.java index 646cc7c..40abde8 100644 --- a/frysk-core/frysk/proc/TestProcGet.java +++ b/frysk-core/frysk/proc/TestProcGet.java @@ -113,7 +113,7 @@ public class TestProcGet public void testGetCommand () { Offspring child = SlaveOffspring.createDaemon(); - Proc childProc = child.assertFindProcAndTasks(); + Proc childProc = child.assertRunToFindProc(); assertEquals("value of child's getCommand()", SlaveOffspring.getExecutable().getName(), childProc.getCommand()); @@ -126,7 +126,7 @@ public class TestProcGet { Offspring child = SlaveOffspring.createDaemon() .assertSendAddClonesWaitForAcks(1); - Proc proc = child.assertFindProcAndTasks(); // and tasks + Proc proc = child.assertRunToFindProc(); // and tasks List tasks = proc.getTasks(); assertEquals("number of tasks", 2, tasks.size()); @@ -155,8 +155,8 @@ public class TestProcGet // Create two children. The refreshes have the side effect of // updating this processes proc list. Proc[] child = new Proc[] { - SlaveOffspring.createChild().assertFindProcAndTasks(), - SlaveOffspring.createChild().assertFindProcAndTasks() }; + SlaveOffspring.createChild().assertRunToFindProc(), + SlaveOffspring.createChild().assertRunToFindProc() }; Proc self = host.getSelf(); assertEquals("number of children", 2, self.getChildren().size()); @@ -176,7 +176,7 @@ public class TestProcGet // Create a process with a known set of arguments. ExecCommand cmd = new ExecCommand(); ExecOffspring child = new ExecOffspring(cmd); - Proc proc = child.assertFindProcAndTasks(); + Proc proc = child.assertRunToFindProc(); String[] cmdLine = proc.getCmdLine(); assertEquals("cmdLine.length", cmd.argv.length, cmdLine.length); for (int i = 0; i < cmd.argv.length; i++) { @@ -193,7 +193,7 @@ public class TestProcGet ExecCommand cmd = new ExecCommand(); ExecOffspring child = new ExecOffspring(cmd); String file = new File(cmd.argv[0]).getCanonicalPath(); - Proc proc = child.assertFindProcAndTasks(); + Proc proc = child.assertRunToFindProc(); assertEquals("exe", proc.getExe(), file); } } diff --git a/frysk-core/frysk/proc/TestProcTasksObserver.java b/frysk-core/frysk/proc/TestProcTasksObserver.java index 57f42d4..87607a4 100644 --- a/frysk-core/frysk/proc/TestProcTasksObserver.java +++ b/frysk-core/frysk/proc/TestProcTasksObserver.java @@ -61,7 +61,7 @@ public class TestProcTasksObserver extends TestLib { */ public void manyExistingThread(SlaveOffspring ackProcess) { - final Proc proc = ackProcess.assertFindProcAndTasks(); + final Proc proc = ackProcess.assertRunToFindProc(); final int count = 4; @@ -90,7 +90,7 @@ public class TestProcTasksObserver extends TestLib { public void singleExistingClone(SlaveOffspring ackProcess) { //Create Process - Proc proc = ackProcess.assertFindProcAndTasks(); + Proc proc = ackProcess.assertRunToFindProc(); ackProcess.assertSendAddCloneWaitForAcks(); @@ -118,7 +118,7 @@ public class TestProcTasksObserver extends TestLib { public void singleExistingThread(SlaveOffspring ackProcess) { //Create Process - Proc proc = ackProcess.assertFindProcAndTasks(); + Proc proc = ackProcess.assertRunToFindProc(); final int count = 1; @@ -143,7 +143,7 @@ public class TestProcTasksObserver extends TestLib { public void doClone(SlaveOffspring ackProcess) { // Create Process - Proc proc = ackProcess.assertFindProcAndTasks(); + Proc proc = ackProcess.assertRunToFindProc(); final int addcount = 1; final int existcount = 1; @@ -177,7 +177,7 @@ public class TestProcTasksObserver extends TestLib { public void delete(SlaveOffspring ackProcess) { // Create Process - Proc proc = ackProcess.assertFindProcAndTasks(); + Proc proc = ackProcess.assertRunToFindProc(); final int delcount = 1; final int existcount = 1; @@ -215,7 +215,7 @@ public class TestProcTasksObserver extends TestLib { { //Create Process - Proc proc = ackProcess.assertFindProcAndTasks(); + Proc proc = ackProcess.assertRunToFindProc(); final int existingcount = 1; final int addcount = 1; diff --git a/frysk-core/frysk/proc/dead/TestLinuxCore.java b/frysk-core/frysk/proc/dead/TestLinuxCore.java index 519f7dc..9266eb5 100644 --- a/frysk-core/frysk/proc/dead/TestLinuxCore.java +++ b/frysk-core/frysk/proc/dead/TestLinuxCore.java @@ -522,7 +522,7 @@ public class TestLinuxCore extends TestLib { // nothing but provide the symbols. LegacyOffspring ackProc = LegacyOffspring.createChild(); assertNotNull(ackProc); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); assertNotNull(proc); return proc; } diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog index 2046d04..bbe5917 100644 --- a/frysk-core/frysk/proc/live/ChangeLog +++ b/frysk-core/frysk/proc/live/ChangeLog @@ -1,5 +1,8 @@ 2008-03-11 Andrew Cagney + * TestProcStopped.java: Update to match Offspring. + * TestRuntimeIsa.java: Ditto. + * LinuxPtraceProc.java (getMainTask()): Implement. 2008-03-10 Andrew Cagney diff --git a/frysk-core/frysk/proc/live/TestProcStopped.java b/frysk-core/frysk/proc/live/TestProcStopped.java index 3033ad4..519f8ff 100644 --- a/frysk-core/frysk/proc/live/TestProcStopped.java +++ b/frysk-core/frysk/proc/live/TestProcStopped.java @@ -59,12 +59,12 @@ public class TestProcStopped extends TestLib { private void stopped(SlaveOffspring ackProc) { ackProc.assertSendStop(); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); new ProcBlockAction(proc, new MyTester()); } private void running(SlaveOffspring ackProc) { - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); new ProcBlockAction(proc, new MyTester()); } diff --git a/frysk-core/frysk/proc/live/TestRuntimeIsa.java b/frysk-core/frysk/proc/live/TestRuntimeIsa.java index eb63dba..312f9be 100644 --- a/frysk-core/frysk/proc/live/TestRuntimeIsa.java +++ b/frysk-core/frysk/proc/live/TestRuntimeIsa.java @@ -111,7 +111,7 @@ public class TestRuntimeIsa extends TestLib { public void testAttachedCreateChild() { SlaveOffspring ackProc = SlaveOffspring.createAttachedChild(); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); assertNotNull("child has an isa at start", proc.getMainTask().getISA()); ackProc.assertSendAddForkWaitForAcks(); Proc child = (Proc) proc.getChildren().iterator().next(); @@ -124,7 +124,7 @@ public class TestRuntimeIsa extends TestLib { public void testAttachedCreateAttachedChild () { SlaveOffspring ackProc = SlaveOffspring.createAttachedChild(); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); class ForkedObserver extends TaskObserverBase @@ -157,7 +157,7 @@ public class TestRuntimeIsa extends TestLib { public void testAttachedCreateAttachedClone() { SlaveOffspring ackProc = SlaveOffspring.createAttachedChild(); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); class ClonedObserver extends TaskObserverBase @@ -189,7 +189,7 @@ public class TestRuntimeIsa extends TestLib { public void testAttachDetachAttachAgainDetachAgainAttachAgainAgain() { SlaveOffspring ackProc = SlaveOffspring.createChild(); - Proc proc = ackProc.assertFindProcAndTasks(); + Proc proc = ackProc.assertRunToFindProc(); Task task = proc.getMainTask(); AttachedObserver attacher = new AttachedObserver(); task.requestAddAttachedObserver(attacher); diff --git a/frysk-core/frysk/testbed/ChangeLog b/frysk-core/frysk/testbed/ChangeLog index abe1e34..0d05d31 100644 --- a/frysk-core/frysk/testbed/ChangeLog +++ b/frysk-core/frysk/testbed/ChangeLog @@ -1,3 +1,11 @@ +2008-03-11 Andrew Cagney + + * TestLib.java (assertRunToFindProc(ProcessIdentifier)): New. + * Offspring.java (assertRunToFindProc()): New. + (assertFindProcAndTasks()): Delete. + * StopEventLoopWhenProcTerminates.java: New. + * TestStopEventLoopWhenProcTerminates.java: New. + 2008-03-03 Andrew Cagney * TestLib.java: Use frysk.config. diff --git a/frysk-core/frysk/testbed/Offspring.java b/frysk-core/frysk/testbed/Offspring.java index 67e6250..e4c3d0b 100644 --- a/frysk-core/frysk/testbed/Offspring.java +++ b/frysk-core/frysk/testbed/Offspring.java @@ -39,14 +39,11 @@ package frysk.testbed; -import frysk.proc.FindProc; import frysk.proc.Proc; import frysk.proc.Task; import frysk.sys.Errno; -import frysk.proc.Manager; import java.util.Iterator; import frysk.sys.Signal; -import frysk.junit.TestCase; import frysk.sys.ProcessIdentifier; /** @@ -82,23 +79,10 @@ public abstract class Offspring { } } /** - * Find/return the child's Proc, polling /proc if necessary. + * Find/return the child's Proc by running the event-loop. */ - public Proc assertFindProcAndTasks () { - class ProcFinder implements FindProc { - Proc proc; - public void procFound(Proc p) { - proc = p; - Manager.eventLoop.requestStop(); - } - public void procNotFound(int pid) { - TestCase.fail("Couldn't find the given proc " + pid); - } - } - ProcFinder findProc = new ProcFinder(); - Manager.host.requestProc(getPid().intValue(), findProc); - Manager.eventLoop.run(); - return findProc.proc; + public Proc assertRunToFindProc() { + return TestLib.assertRunToFindProc(getPid()); } /** @@ -106,7 +90,7 @@ public abstract class Offspring { * necessary. */ public Task findTaskUsingRefresh (boolean mainTask) { - Proc proc = assertFindProcAndTasks(); + Proc proc = assertRunToFindProc(); for (Iterator i = proc.getTasks().iterator(); i.hasNext();) { Task task = (Task) i.next(); if (task.getTid() == proc.getPid()) { diff --git a/frysk-core/frysk/testbed/StopEventLoopWhenProcRemoved.java b/frysk-core/frysk/testbed/StopEventLoopWhenProcTerminates.java similarity index 68% copy from frysk-core/frysk/testbed/StopEventLoopWhenProcRemoved.java copy to frysk-core/frysk/testbed/StopEventLoopWhenProcTerminates.java index a0e7dc4..b9a2449 100644 --- a/frysk-core/frysk/testbed/StopEventLoopWhenProcRemoved.java +++ b/frysk-core/frysk/testbed/StopEventLoopWhenProcTerminates.java @@ -1,6 +1,6 @@ // This file is part of the program FRYSK. // -// Copyright 2005, 2006, 2007, 2008, Red Hat Inc. +// Copyright 2008, Red Hat Inc. // // FRYSK is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by @@ -39,48 +39,50 @@ package frysk.testbed; -import java.util.Observer; -import java.util.Observable; import frysk.proc.Proc; import frysk.rsl.Log; import frysk.proc.Manager; +import frysk.proc.TaskObserver; +import frysk.proc.Action; +import frysk.isa.signals.Signal; +import frysk.proc.Task; import frysk.sys.ProcessIdentifier; -import frysk.sys.ProcessIdentifierFactory; /** * An observer that stops the eventloop when the process with the - * given pid is removed. + * given pid terminates. */ -public class StopEventLoopWhenProcRemoved implements Observer { - private static final Log fine - = Log.fine(StopEventLoopWhenProcRemoved.class); - public boolean p; +public class StopEventLoopWhenProcTerminates extends TaskObserverBase + implements TaskObserver.Terminated +{ + private static final Log fine + = Log.fine(StopEventLoopWhenProcTerminates.class); - private ProcessIdentifier pid; + public boolean terminated; + public Signal signal; + public int status; - public StopEventLoopWhenProcRemoved(ProcessIdentifier pid) { - this.pid = pid; - Manager.host.observableProcRemovedXXX.addObserver(this); + private Proc proc; + public String toString() { + return proc.toString(); } - public StopEventLoopWhenProcRemoved(Offspring pid) { - this(pid.getPid()); + + public StopEventLoopWhenProcTerminates(Proc proc) { + proc.getMainTask().requestAddTerminatedObserver(this); } - public StopEventLoopWhenProcRemoved(Proc proc) { - this(ProcessIdentifierFactory.create(proc.getPid())); + + public StopEventLoopWhenProcTerminates(ProcessIdentifier pid) { + this(TestLib.assertRunToFindProc(pid)); } - public void update (Observable o, Object obj) { - Proc proc = (Proc) obj; - if (proc.getPid() == this.pid.intValue()) { - // Shut things down. - fine.log(this, "update", proc, - "has been removed stopping event loop"); - Manager.eventLoop.requestStop(); - p = true; - } else { - fine.log(this, "update", proc, - "has been removed NOT stopping event loop"); - } + public Action updateTerminated(Task task, Signal signal, int status) { + fine.log(this, "updateTerminated", task, "signal", signal, "status", hooks/post-receive -- frysk system monitor/debugger