public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Add a ProcessIdentifierFactory; use.
@ 2008-01-31 20:30 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-01-31 20:30 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  3f77e12c3116c763bea37e0b56d82862f22dcada (commit)
      from  d54ac89a4df090b463fc40bb4de4319e2da36111 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 3f77e12c3116c763bea37e0b56d82862f22dcada
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Jan 31 15:22:55 2008 -0500

    Add a ProcessIdentifierFactory; use.
    
    frysk-sys/frysk/sys/ChangeLog
    2008-01-31  Andrew Cagney  <cagney@redhat.com>
    
    	* Child.java: Extend ProcessIdentiferDecorator.
    	* Daemon.java: Ditto.
    	* cni/Child.cxx (Child::child): Use ProcessIdentifierFactory.
    	* cni/Daemon.cxx (Daemon::daemon): Ditto.
    	* ProcessIdentifierDecorator.java: New file.
    	* TestProcessIdentifier.java: New file.
    	* ProcessIdentifierFactory.java: New file.
    	* ProcessIdentifier.java: Use intValue() instead of pid through
    	out.
    
    frysk-sys/frysk/testbed/ChangeLog
    2008-01-31  Andrew Cagney  <cagney@redhat.com>
    
    	* TearDownProcess.java: Use ProcessIdentifierFactory.

-----------------------------------------------------------------------

Summary of changes:
 frysk-sys/frysk/sys/ChangeLog                      |   12 ++++
 frysk-sys/frysk/sys/Child.java                     |   24 +++-----
 frysk-sys/frysk/sys/Daemon.java                    |   23 +++-----
 frysk-sys/frysk/sys/ProcessIdentifier.java         |   46 +++++----------
 .../ProcessIdentifierDecorator.java}               |   20 ++++--
 .../frysk/sys/ProcessIdentifierFactory.java        |   60 ++++++++++++++------
 .../frysk/sys/TestProcessIdentifier.java           |   42 ++++++--------
 frysk-sys/frysk/sys/cni/Child.cxx                  |    6 +-
 frysk-sys/frysk/sys/cni/Daemon.cxx                 |    6 +-
 frysk-sys/frysk/testbed/ChangeLog                  |    4 +
 frysk-sys/frysk/testbed/TearDownProcess.java       |   17 +++---
 11 files changed, 139 insertions(+), 121 deletions(-)
 copy frysk-sys/frysk/{CompilerVersion.java => sys/ProcessIdentifierDecorator.java} (86%)
 copy frysk-core/frysk/testbed/IsaTestbed.java => frysk-sys/frysk/sys/ProcessIdentifierFactory.java (62%)
 copy frysk-core/frysk/testbed/IsaTestbed.java => frysk-sys/frysk/sys/TestProcessIdentifier.java (71%)

First 500 lines of diff:
diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog
index a29bfbc..cd00993 100644
--- a/frysk-sys/frysk/sys/ChangeLog
+++ b/frysk-sys/frysk/sys/ChangeLog
@@ -1,3 +1,15 @@
+2008-01-31  Andrew Cagney  <cagney@redhat.com>
+
+	* Child.java: Extend ProcessIdentiferDecorator.
+	* Daemon.java: Ditto.
+	* cni/Child.cxx (Child::child): Use ProcessIdentifierFactory.
+	* cni/Daemon.cxx (Daemon::daemon): Ditto.
+	* ProcessIdentifierDecorator.java: New file.
+	* TestProcessIdentifier.java: New file.
+	* ProcessIdentifierFactory.java: New file.
+	* ProcessIdentifier.java: Use intValue() instead of pid through
+	out.
+
 2008-01-25  Andrew Cagney  <cagney@redhat.com>
 
 	* Signal.java-sh: Add the synonyms - POLL, IOT, INFO and CLD -
diff --git a/frysk-sys/frysk/sys/Child.java b/frysk-sys/frysk/sys/Child.java
index d481035..825bf14 100644
--- a/frysk-sys/frysk/sys/Child.java
+++ b/frysk-sys/frysk/sys/Child.java
@@ -39,41 +39,33 @@
 
 package frysk.sys;
 
-public class Child
-    extends ProcessIdentifier
-{
+public class Child extends ProcessIdentifierDecorator {
     /**
      * Create a child process (direct decendant of this process) that
      * redirects its I/O to REDIRECT, and executes EXEC.
      *
      * Private.
      */
-    private static native int child (Redirect redirect, Execute exec);
-
+    private static native ProcessIdentifier child(Redirect redirect,
+						  Execute exec);
     /**
      * Create a child wired to IO redirect, running exec.
      *
      * Package private.
      */
-    Child (Redirect redirect, Execute exec)
-    {
+    Child(Redirect redirect, Execute exec) {
 	super (child (redirect, exec));
     }
-
     /**
      * Create a child wired to nothing; STDIN is closed, STDOUT/ERROR
      * are the same as for this process.
      */
-    public Child (Execute exec)
-    {
-	this (new Redirect ()
-	    {
-		protected void reopen ()
-		{
+    public Child(Execute exec) {
+	this(new Redirect() {
+		protected void reopen() {
 		    FileDescriptor.in.close ();
 		}
-		protected void close ()
-		{
+		protected void close() {
 		}
 	    }, exec);
     }
diff --git a/frysk-sys/frysk/sys/Daemon.java b/frysk-sys/frysk/sys/Daemon.java
index 371638f..6b2cf3d 100644
--- a/frysk-sys/frysk/sys/Daemon.java
+++ b/frysk-sys/frysk/sys/Daemon.java
@@ -44,22 +44,20 @@ package frysk.sys;
  * the parent.
  */
 
-public class Daemon
-    extends ProcessIdentifier
-{
+public class Daemon extends ProcessIdentifierDecorator {
     /**
      * Create a daemon process (child of process 1 a.k.a. init) that
      * redirects its I/O to REDIRECT, and executes EXEC.
      *
      * Package private.
      */
-    private static native int daemon (Redirect redirect, Execute exec);
+    private static native ProcessIdentifier daemon(Redirect redirect,
+						   Execute exec);
 
     /**
      * Create a daemon wired to REDIRECT, and running EXEC.
      */
-    Daemon (Redirect redirect, Execute exec)
-    {
+    Daemon(Redirect redirect, Execute exec) {
 	super (daemon (redirect, exec));
     }
 
@@ -67,15 +65,12 @@ public class Daemon
      * Create a daemon wired to nothing; STDIN is closed, STDOUT/ERROR
      * are the same as for this process.
      */
-    public Daemon (Execute exec)
-    {
-	this (new Redirect ()
-	    {
-		protected void reopen ()
-		{
-		    FileDescriptor.in.close ();
+    public Daemon(Execute exec) {
+	this(new Redirect() {
+		protected void reopen() {
+		    FileDescriptor.in.close();
 		}
-		protected void close ()
+		protected void close()
 		{
 		}
 	    }, exec);
diff --git a/frysk-sys/frysk/sys/ProcessIdentifier.java b/frysk-sys/frysk/sys/ProcessIdentifier.java
index b7cc1df..40118c6 100644
--- a/frysk-sys/frysk/sys/ProcessIdentifier.java
+++ b/frysk-sys/frysk/sys/ProcessIdentifier.java
@@ -1,6 +1,6 @@
 // This file is part of the program FRYSK.
 //
-// Copyright 2007, Red Hat Inc.
+// Copyright 2007, 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
@@ -42,28 +42,17 @@ package frysk.sys;
 /**
  * Identifies a process.
  */
-public class ProcessIdentifier
-    implements Comparable
-{
-    private int pid;
-    public ProcessIdentifier (int pid)
-    {
-	this.pid = pid;
-    }
+public abstract class ProcessIdentifier implements Comparable {
     public int hashCode () {
-	return pid;
-    }
-    public int intValue() {
-        return pid;
+	return intValue();
     }
-    public int compareTo (Object o)
-    {
-	return ((ProcessIdentifier)o).pid - this.pid;
+    public abstract int intValue();
+    public int compareTo (Object o) {
+	return this.intValue() - ((ProcessIdentifier)o).intValue();
     }
-    public boolean equals (Object o)
-    {
+    public boolean equals(Object o) {
 	if (o instanceof ProcessIdentifier)
-	    return ((ProcessIdentifier)o).pid == this.pid;
+	    return ((ProcessIdentifier)o).intValue() == this.intValue();
 	else
 	    return false;
     }
@@ -71,39 +60,36 @@ public class ProcessIdentifier
      * Represent the ProcessIdentifier textually.  Return the PID as a
      * number so that it can be used directly.
      */
-    public String toString ()
-    {
-	return Integer.toString (pid);
+    public String toString () {
+	return Integer.toString(intValue());
     }
 
     /**
      * Send a fatal signal (SIGKILL) to this process.
      */
     public void kill() {
-	Signal.KILL.kill(pid);
+	Signal.KILL.kill(intValue());
     }
 
     /**
      * Send a signal to THIS pid.
      */
     public void tkill(Signal signal) {
-	signal.tkill(pid);
+	signal.tkill(intValue());
     }
 
     /**
      * Perform a blocking drain of all wait events from this process.
      * Only returns when the process has disappeared.
      */
-    public void blockingDrain ()
-    {
-	Wait.drain (pid);
+    public void blockingDrain() {
+	Wait.drain(intValue());
     }
 
     /**
      * Perform a blocking wait for a single event from this process.
      */
-    public void blockingWait (WaitBuilder o)
-    {
-	Wait.waitAll (pid, o);
+    public void blockingWait(WaitBuilder o) {
+	Wait.waitAll(intValue(), o);
     }
 }
diff --git a/frysk-sys/frysk/CompilerVersion.java b/frysk-sys/frysk/sys/ProcessIdentifierDecorator.java
similarity index 86%
copy from frysk-sys/frysk/CompilerVersion.java
copy to frysk-sys/frysk/sys/ProcessIdentifierDecorator.java
index 9e1eb71..f1d3418 100644
--- a/frysk-sys/frysk/CompilerVersion.java
+++ b/frysk-sys/frysk/sys/ProcessIdentifierDecorator.java
@@ -37,12 +37,18 @@
 // version and license this file solely under the GPL without
 // exception.
 
-package frysk;
+package frysk.sys;
 
-public class CompilerVersion {
-
-    public static native int getVersion();
-    public static native int getMinorVersion();
-    public static native int getPatchLevel();
-    public static native int getRHRelease();
+/**
+ * Identifies a process.
+ */
+public class ProcessIdentifierDecorator extends ProcessIdentifier {
+    private final ProcessIdentifier pid;
+    ProcessIdentifierDecorator(ProcessIdentifier pid) {
+	super();
+	this.pid = pid;
+    }
+    public int intValue() {
+        return pid.intValue();
+    }
 }
diff --git a/frysk-core/frysk/testbed/IsaTestbed.java b/frysk-sys/frysk/sys/ProcessIdentifierFactory.java
similarity index 62%
copy from frysk-core/frysk/testbed/IsaTestbed.java
copy to frysk-sys/frysk/sys/ProcessIdentifierFactory.java
index 5ea3c66..b5227fa 100644
--- a/frysk-core/frysk/testbed/IsaTestbed.java
+++ b/frysk-sys/frysk/sys/ProcessIdentifierFactory.java
@@ -37,36 +37,60 @@
 // version and license this file solely under the GPL without
 // exception.
 
-package frysk.testbed;
+package frysk.sys;
 
-import frysk.isa.ISA;
-import frysk.isa.ElfMap;
-import frysk.Config;
+import java.util.WeakHashMap;
+import java.util.Map;
 
 /**
- * Return the ISA being used by the testbed.
+ * Generates ProcessIdentifiers (and ensures that they are unique).
  */
+public class ProcessIdentifierFactory {
 
-public class IsaTestbed {
+    private static class ConcreteProcessIdentifier extends ProcessIdentifier {
+	private final int pid;
+	ConcreteProcessIdentifier(int pid) {
+	    this.pid = pid;
+	}
+	public int intValue() {
+	    return pid;
+	}
+    }
 
     /**
-     * Return the default isa being used for testing.
+     * Class to use when searching for an existing pid in the cached
+     * process table.
      */
-    public static ISA getISA() {
-	return ElfMap.getISA(Config.getPkgLibFile("funit-slave"));
+    private static class ProcessIdentifierKey extends ProcessIdentifier {
+	ProcessIdentifierKey() {
+	    super();
+	}
+	int pid;
+	public int intValue() {
+	    return pid;
+	}
     }
-    
-    /**
-     * Return the 32-bit isa being used for 32-on-64 testing.
-     */
-    public static ISA getISA32() {
-	return ElfMap.getISA(Config.getPkgLib32File("funit-slave"));
+
+    private static final Map processTable = new WeakHashMap();
+    private static final ProcessIdentifierKey key = new ProcessIdentifierKey();
+
+    static ProcessIdentifier create(int pid) {
+	synchronized (processTable) {
+	    key.pid = pid;
+	    ProcessIdentifier processIdentifier
+		= (ProcessIdentifier) processTable.get(key);
+	    if (processIdentifier == null) {
+		processIdentifier = new ConcreteProcessIdentifier(pid);
+		processTable.put(processIdentifier, processIdentifier);
+	    }
+	    return processIdentifier;
+	}
     }
 
     /**
-     * Return the 64-bit isa being used for 32-on-64 testing.
+     * Is going away.
      */
-    public static ISA getISA64() {
-	return ElfMap.getISA(Config.getPkgLib64File("funit-slave"));
+    public static ProcessIdentifier createFIXME(int pid) {
+	return create(pid);
     }
 }
diff --git a/frysk-core/frysk/testbed/IsaTestbed.java b/frysk-sys/frysk/sys/TestProcessIdentifier.java
similarity index 71%
copy from frysk-core/frysk/testbed/IsaTestbed.java
copy to frysk-sys/frysk/sys/TestProcessIdentifier.java
index 5ea3c66..44c6daa 100644
--- a/frysk-core/frysk/testbed/IsaTestbed.java
+++ b/frysk-sys/frysk/sys/TestProcessIdentifier.java
@@ -37,36 +37,32 @@
 // version and license this file solely under the GPL without
 // exception.
 
-package frysk.testbed;
+package frysk.sys;
 
-import frysk.isa.ISA;
-import frysk.isa.ElfMap;
-import frysk.Config;
+import frysk.junit.TestCase;
 
 /**
- * Return the ISA being used by the testbed.
+ * Generates ProcessIdentifiers (and ensures that they are unique).
  */
+public class TestProcessIdentifier extends TestCase {
 
-public class IsaTestbed {
-
-    /**
-     * Return the default isa being used for testing.
-     */
-    public static ISA getISA() {
-	return ElfMap.getISA(Config.getPkgLibFile("funit-slave"));
+    public void testSingleton() {
+	assertSame("pid", ProcessIdentifierFactory.create(1),
+		   ProcessIdentifierFactory.create(1));
     }
-    
-    /**
-     * Return the 32-bit isa being used for 32-on-64 testing.
-     */
-    public static ISA getISA32() {
-	return ElfMap.getISA(Config.getPkgLib32File("funit-slave"));
+
+    public void testEquals() {
+	ProcessIdentifier one = ProcessIdentifierFactory.create(1);
+	ProcessIdentifier two = ProcessIdentifierFactory.create(2);
+	assertTrue("one == one", one.equals(one));
+	assertFalse("one != two", one.equals(two));
     }
 
-    /**
-     * Return the 64-bit isa being used for 32-on-64 testing.
-     */
-    public static ISA getISA64() {
-	return ElfMap.getISA(Config.getPkgLib64File("funit-slave"));
+    public void testCompareTo() {
+	ProcessIdentifier one = ProcessIdentifierFactory.create(1);
+	ProcessIdentifier two = ProcessIdentifierFactory.create(2);
+	assertTrue("one == one", one.compareTo(one) == 0);
+	assertTrue("one < two", one.compareTo(two) < 0);
+	assertTrue("two > one", two.compareTo(one) > 0);
     }
 }
diff --git a/frysk-sys/frysk/sys/cni/Child.cxx b/frysk-sys/frysk/sys/cni/Child.cxx
index f3f3358..26741bf 100644
--- a/frysk-sys/frysk/sys/cni/Child.cxx
+++ b/frysk-sys/frysk/sys/cni/Child.cxx
@@ -49,11 +49,13 @@
 
 #include "frysk/sys/cni/Errno.hxx"
 #include "frysk/sys/ProcessIdentifier.h"
+#include "frysk/sys/ProcessIdentifierFactory.h"
+#include "frysk/sys/ProcessIdentifierDecorator.h"
 #include "frysk/sys/Child.h"
 #include "frysk/sys/Redirect.h"
 #include "frysk/sys/Execute.h"
 
-jint
+frysk::sys::ProcessIdentifier*
 frysk::sys::Child::child (frysk::sys::Redirect* redirect,
 			  frysk::sys::Execute* exec)
 {
@@ -73,6 +75,6 @@ frysk::sys::Child::child (frysk::sys::Redirect* redirect,
     ::_exit (0);
   default:
     redirect->close ();
-    return pid;
+    return frysk::sys::ProcessIdentifierFactory::create(pid);
   }
 }
diff --git a/frysk-sys/frysk/sys/cni/Daemon.cxx b/frysk-sys/frysk/sys/cni/Daemon.cxx
index 6d1b547..f4b5d60 100644
--- a/frysk-sys/frysk/sys/cni/Daemon.cxx
+++ b/frysk-sys/frysk/sys/cni/Daemon.cxx
@@ -49,11 +49,13 @@
 
 #include "frysk/sys/cni/Errno.hxx"
 #include "frysk/sys/ProcessIdentifier.h"
+#include "frysk/sys/ProcessIdentifierFactory.h"
+#include "frysk/sys/ProcessIdentifierDecorator.h"
 #include "frysk/sys/Daemon.h"
 #include "frysk/sys/Redirect.h"
 #include "frysk/sys/Execute.h"
 
-jint
+frysk::sys::ProcessIdentifier*
 frysk::sys::Daemon::daemon (frysk::sys::Redirect* redirect,
 			    frysk::sys::Execute* exec)
 {
@@ -99,6 +101,6 @@ frysk::sys::Daemon::daemon (frysk::sys::Redirect* redirect,
       throwErrno (wait_errno, "waitpid", "process %d", v);
     // printf ("v %d pid %d\n", v, pid);
     redirect->close ();
-    return pid;
+    return frysk::sys::ProcessIdentifierFactory::create(pid);
   }
 }
diff --git a/frysk-sys/frysk/testbed/ChangeLog b/frysk-sys/frysk/testbed/ChangeLog
index 5421b87..b8df3fb 100644
--- a/frysk-sys/frysk/testbed/ChangeLog
+++ b/frysk-sys/frysk/testbed/ChangeLog
@@ -1,3 +1,7 @@
+2008-01-31  Andrew Cagney  <cagney@redhat.com>
+
+	* TearDownProcess.java: Use ProcessIdentifierFactory.
+
 2008-01-25  Andrew Cagney  <cagney@redhat.com>
 
 	* TearDownExpect.java: Extend Expect.
diff --git a/frysk-sys/frysk/testbed/TearDownProcess.java b/frysk-sys/frysk/testbed/TearDownProcess.java
index 33a73f3..f630a3a 100644
--- a/frysk-sys/frysk/testbed/TearDownProcess.java
+++ b/frysk-sys/frysk/testbed/TearDownProcess.java
@@ -40,6 +40,7 @@
 
 package frysk.testbed;
 
+import frysk.sys.ProcessIdentifierFactory;
 import frysk.junit.TestCase;
 import java.util.logging.Logger;
 import java.util.logging.Level;
@@ -116,9 +117,8 @@ public class TearDownProcess
      * Add the pid to the set of pidsToKillDuringTearDown that should
      * be killed off during tearDown.
      */
-    public static void add (int pid)
-    {
-	add (new ProcessIdentifier (pid));
+    public static void add(int pid) {
+	add(ProcessIdentifierFactory.createFIXME(pid));
     }
 
     /**
@@ -129,9 +129,8 @@ public class TearDownProcess
     {
 	return pidsToKillDuringTearDown.contains (pid);
     }
-    public static boolean contains (int pid)
-    {


hooks/post-receive
--
frysk system monitor/debugger


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-01-31 20:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-01-31 20:30 [SCM] master: Add a ProcessIdentifierFactory; use cagney

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