public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Re-implement frysk.testbed.ForkFactory using Fork.spawn.
@ 2008-05-22 17:44 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-05-22 17:44 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  bdd9bad5f20ab08bd3f23c1db6db0c43e46b40a0 (commit)
       via  fbc436467a694e9cd8533035bacd03eeb78e4564 (commit)
       via  f275ed365e905846bbe07154bc93314d9f91f3ee (commit)
      from  05dbb548a7214062166c1cd7eb447c3ef7ca88d1 (commit)

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

- Log -----------------------------------------------------------------
commit bdd9bad5f20ab08bd3f23c1db6db0c43e46b40a0
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu May 22 13:43:17 2008 -0400

    Re-implement frysk.testbed.ForkFactory using Fork.spawn.
    
    frysk-sys/frysk/sys/ChangeLog
    2008-05-22  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/Fork.hxx (class redirect_nostdin): New.
    	* cni/Fork.hxx (class redirect_nostdin): New.
    
    frysk-sys/frysk/testbed/ChangeLog
    2008-05-22  Andrew Cagney  <cagney@redhat.com>
    
    	* TestForkFactory.java: New.
    	* cni/ForkFactory.cxx: New.
    	* jni/ForkFactory.cxx: New.

commit fbc436467a694e9cd8533035bacd03eeb78e4564
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu May 22 12:27:14 2008 -0400

    Delete frysk.testbed.Tee
    
    frysk-sys/frysk/sys/ChangeLog
    2008-05-22  Andrew Cagney  <cagney@redhat.com>
    
    	* TestPipePair.java (testDaemonExecute()): Delete.
    	(testChildExecute()): Delete.
    
    frysk-sys/frysk/testbed/ChangeLog
    2008-05-22  Andrew Cagney  <cagney@redhat.com>
    
    	* ForkFactory.java: Don't use Execute.
    	* Tee.java: Delete.
    	* cni/Tee.java: Delete.
    	* jni/Tee.java: Delete.

commit f275ed365e905846bbe07154bc93314d9f91f3ee
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu May 22 11:52:57 2008 -0400

    Fix errno, vs error typos.
    
    frysk-sys/ChangeLog
    2008-05-22  Andrew Cagney  <cagney@redhat.com>
    
    	* Makefile.am (JniRunner): Add frysk.testbed.
    
    frysk-sys/jnixx/ChangeLog
    2008-05-22  Andrew Cagney  <cagney@redhat.com>
    
    	* exceptions.cxx (errnoException): Pass up error, not errno.
    	(errnoException): Ditto.

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

Summary of changes:
 frysk-sys/ChangeLog                                |    2 +
 frysk-sys/Makefile.am                              |    2 +-
 frysk-sys/frysk/sys/ChangeLog                      |    6 +++
 frysk-sys/frysk/sys/TestPipePair.java              |   19 ---------
 frysk-sys/frysk/sys/cni/Fork.hxx                   |   15 +++++++
 frysk-sys/frysk/sys/jni/Fork.hxx                   |   15 +++++++
 frysk-sys/frysk/testbed/ChangeLog                  |   10 +++++
 frysk-sys/frysk/testbed/ForkFactory.java           |   15 +-----
 .../testbed/{jni/Tee.cxx => TestForkFactory.java}  |   23 ++++++----
 .../testbed/{Tee.java => cni/ForkFactory.cxx}      |   43 ++++++++++++++------
 .../testbed/{cni/Tee.cxx => jni/ForkFactory.cxx}   |   35 ++++++++++++----
 frysk-sys/jnixx/ChangeLog                          |    3 +
 frysk-sys/jnixx/exceptions.cxx                     |    4 +-
 13 files changed, 127 insertions(+), 65 deletions(-)
 rename frysk-sys/frysk/testbed/{jni/Tee.cxx => TestForkFactory.java} (85%)
 rename frysk-sys/frysk/testbed/{Tee.java => cni/ForkFactory.cxx} (74%)
 rename frysk-sys/frysk/testbed/{cni/Tee.cxx => jni/ForkFactory.cxx} (76%)

First 500 lines of diff:
diff --git a/frysk-sys/ChangeLog b/frysk-sys/ChangeLog
index 814a8e1..5dd0474 100644
--- a/frysk-sys/ChangeLog
+++ b/frysk-sys/ChangeLog
@@ -1,5 +1,7 @@
 2008-05-22  Andrew Cagney  <cagney@redhat.com>
 
+	* Makefile.am (JniRunner): Add frysk.testbed.
+	
 	* Makefile.am (JniRunner): Add TestStatelessFile and
 	TestPseudoTerminal.
 
diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am
index e8ae3e6..dbc9742 100644
--- a/frysk-sys/Makefile.am
+++ b/frysk-sys/Makefile.am
@@ -103,7 +103,7 @@ JniRunner: | frysk-sys.jar libfrysk-sys-jni.so
 	echo "    frysk.sys.TestPseudoTerminal \\"		>> $@.tmp
 	echo "    frysk.sys.TestSignal \\"			>> $@.tmp
 	echo "    frysk.sys.TestSignalSet \\"			>> $@.tmp
-	echo "    frysk.sys.TestStatelessFile \\"		>> $@.tmp
+	echo "    frysk.testbed \\"				>> $@.tmp
 	echo "    inua \\"					>> $@.tmp
 	echo "    jnixx \\"					>> $@.tmp
 	echo "    lib.stdcpp \\"				>> $@.tmp
diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog
index 8bd46c2..887b67c 100644
--- a/frysk-sys/frysk/sys/ChangeLog
+++ b/frysk-sys/frysk/sys/ChangeLog
@@ -1,5 +1,11 @@
 2008-05-22  Andrew Cagney  <cagney@redhat.com>
 
+	* jni/Fork.hxx (class redirect_nostdin): New.
+	* cni/Fork.hxx (class redirect_nostdin): New.
+
+	* TestPipePair.java (testDaemonExecute()): Delete.
+	(testChildExecute()): Delete.
+	
 	* jni/Poll.cxx: Implement.
 	* jni/AuditLibs.cxx: Implement.
 	* jni/StatelessFile.cxx: Implement.
diff --git a/frysk-sys/frysk/sys/TestPipePair.java b/frysk-sys/frysk/sys/TestPipePair.java
index 85e1fe4..e5a6daf 100644
--- a/frysk-sys/frysk/sys/TestPipePair.java
+++ b/frysk-sys/frysk/sys/TestPipePair.java
@@ -40,7 +40,6 @@
 package frysk.sys;
 
 import frysk.junit.TestCase;
-import frysk.testbed.Tee;
 import frysk.rsl.Log;
 import frysk.config.Prefix;
 
@@ -109,24 +108,6 @@ public class TestPipePair extends TestCase {
 	verifyIO ();
     }
 
-    /**
-     * Test a daemon assembly file.
-     */
-    public void testDaemonExecute ()
-    {
-	pipe = new DaemonPipePair (new Tee ());
-	verifyIO ();
-    }
-
-    /**
-     * Test a child assembly file.
-     */
-    public void testChildExecute ()
-    {
-	pipe = new ChildPipePair (new Tee ());
-	verifyIO ();
-    }
-
     private String[] funitProcMask = new String[] {
 	Prefix.pkgLibFile("funit-procmask").getPath(),
 	"-n",
diff --git a/frysk-sys/frysk/sys/cni/Fork.hxx b/frysk-sys/frysk/sys/cni/Fork.hxx
index 11137d8..6352cd1 100644
--- a/frysk-sys/frysk/sys/cni/Fork.hxx
+++ b/frysk-sys/frysk/sys/cni/Fork.hxx
@@ -56,6 +56,18 @@ public:
   }
 };
 
+/**
+ * Just close standard input; leave the rest as is.
+ */
+class redirect_nostdin : public redirect {
+  void reopen() {
+    ::close(0);
+  }
+};
+
+/**
+ * What to do once the child/daemon process fork as occured.
+ */
 class exec {
 public:
   virtual void execute() = 0;
@@ -64,6 +76,9 @@ public:
   }
 };
 
+/**
+ * exec the specified program.
+ */
 class exec_program : public exec {
   char* exePath;
   char** argv;
diff --git a/frysk-sys/frysk/sys/jni/Fork.hxx b/frysk-sys/frysk/sys/jni/Fork.hxx
index c92ea61..b64feb2 100644
--- a/frysk-sys/frysk/sys/jni/Fork.hxx
+++ b/frysk-sys/frysk/sys/jni/Fork.hxx
@@ -56,6 +56,18 @@ public:
   }
 };
 
+/**
+ * Just close standard input; leave the rest as is.
+ */
+class redirect_nostdin : public redirect {
+  void reopen() {
+    ::close(0);
+  }
+};
+
+/**
+ * What to do once the child/daemon process fork as occured.
+ */
 class exec {
 public:
   virtual void execute() = 0;
@@ -64,6 +76,9 @@ public:
   }
 };
 
+/**
+ * exec the specified program.
+ */
 class exec_program : public exec {
   StringChars exe;
   const char* exeElements;
diff --git a/frysk-sys/frysk/testbed/ChangeLog b/frysk-sys/frysk/testbed/ChangeLog
index 587259c..3ac4e87 100644
--- a/frysk-sys/frysk/testbed/ChangeLog
+++ b/frysk-sys/frysk/testbed/ChangeLog
@@ -1,3 +1,13 @@
+2008-05-22  Andrew Cagney  <cagney@redhat.com>
+
+	* TestForkFactory.java: New.
+	* cni/ForkFactory.cxx: New.
+	* jni/ForkFactory.cxx: New.
+	* ForkFactory.java: Don't use Execute.
+	* Tee.java: Delete.
+	* cni/Tee.java: Delete.
+	* jni/Tee.java: Delete.
+
 2008-05-14  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/LocalMemory.cxx: Update #includes to match jnixx rename.
diff --git a/frysk-sys/frysk/testbed/ForkFactory.java b/frysk-sys/frysk/testbed/ForkFactory.java
index 6c06e96..e42f50c 100644
--- a/frysk-sys/frysk/testbed/ForkFactory.java
+++ b/frysk-sys/frysk/testbed/ForkFactory.java
@@ -41,15 +41,13 @@ package frysk.testbed;
 
 import frysk.rsl.Log;
 import frysk.junit.TestCase;
-import frysk.sys.Execute;
 import frysk.sys.Signal;
-import frysk.sys.Itimer;
 import frysk.sys.ProcessIdentifier;
+import frysk.sys.ProcessIdentifierFactory;
 import frysk.sys.ptrace.Ptrace;
 import frysk.sys.Wait;
 import frysk.sys.UnhandledWaitBuilder;
 import frysk.sys.SignalBuilder;
-import frysk.sys.DaemonFactory;
 
 /**
  * Create a copy of this process running as a daemon.
@@ -59,19 +57,12 @@ public class ForkFactory {
     private static final Log fine = Log.fine(ForkFactory.class);
 
     public static ProcessIdentifier detachedDaemon() {
-	ProcessIdentifier pid = DaemonFactory.create(new Execute() {
-		final int timeout = TestCase.getTimeoutSeconds();
-		public void execute() {
-		    int remaining = timeout;
-		    do
-			remaining -= Itimer.sleep (remaining);
-		    while (remaining > 0);
-		}
-	    });
+	ProcessIdentifier pid = ProcessIdentifierFactory.create(fork(TestCase.getTimeoutSeconds()));
 	TearDownProcess.add(pid);
 	fine.log("detachedDaemon", pid);
 	return pid;
     }
+    private static native int fork(int timeout);
 
     public static ProcessIdentifier attachedDaemon() {
 	ProcessIdentifier pid = detachedDaemon();
diff --git a/frysk-sys/frysk/testbed/jni/Tee.cxx b/frysk-sys/frysk/testbed/TestForkFactory.java
similarity index 85%
rename from frysk-sys/frysk/testbed/jni/Tee.cxx
rename to frysk-sys/frysk/testbed/TestForkFactory.java
index 85f3ce7..f71407e 100644
--- a/frysk-sys/frysk/testbed/jni/Tee.cxx
+++ b/frysk-sys/frysk/testbed/TestForkFactory.java
@@ -37,15 +37,20 @@
 // version and license this file solely under the GPL without
 // exception.
 
-#include <stdio.h>
-#include <unistd.h>
+package frysk.testbed;
 
-#include "jni.hxx"
+import frysk.junit.TestCase;
 
-void
-frysk::testbed::Tee::execute(::jnixx::env env) {
-  char b;
-  while (::read (STDIN_FILENO, &b, 1) > 0) {
-    ::write (STDOUT_FILENO, &b, 1);
-  }
+public class TestForkFactory extends TestCase {
+    public void tearDown() {
+	TearDownProcess.tearDown();
+    }
+    public void testDetachedDaemon() {
+	ForkFactory.detachedDaemon();
+	// shouldn't abort.
+    }
+    public void testAttachedDaemon() {
+	ForkFactory.attachedDaemon();
+	// shouldn't abort.
+    }
 }
diff --git a/frysk-sys/frysk/testbed/Tee.java b/frysk-sys/frysk/testbed/cni/ForkFactory.cxx
similarity index 74%
rename from frysk-sys/frysk/testbed/Tee.java
rename to frysk-sys/frysk/testbed/cni/ForkFactory.cxx
index aeee7af..3b2eab6 100644
--- a/frysk-sys/frysk/testbed/Tee.java
+++ b/frysk-sys/frysk/testbed/cni/ForkFactory.cxx
@@ -1,6 +1,6 @@
 // This file is part of the program FRYSK.
 //
-// Copyright 2007, 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
@@ -37,19 +37,36 @@
 // version and license this file solely under the GPL without
 // exception.
 
-package frysk.testbed;
+#include <stdint.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
 
-import frysk.sys.Execute;
+#include <gcj/cni.h>
 
-/**
- * XXX: Instead of having TestPipePair implement Execute, this
- * static nested class is used.  This is to avoid having a native
- * class that extends junit.framework.TestCase - a header file for
- * which which isn't available.
- */
+#include "frysk/sys/cni/Errno.hxx"
+#include "frysk/testbed/ForkFactory.h"
+#include "frysk/sys/cni/Fork.hxx"
 
-public class Tee
-    implements Execute
-{
-    public native void execute ();
+class exec_sleep : public exec {
+private:
+  int timeout;
+public:
+  exec_sleep(int timeout) {
+    this->timeout = timeout;
+  }
+  void execute() {
+    int remaining = timeout;
+    do
+      remaining -= ::sleep(remaining);
+    while (remaining > 0);
+    ::_exit(0);
+  }
+};
+
+jint
+frysk::testbed::ForkFactory::fork(jint timeout) {
+  exec_sleep sleeper = exec_sleep(timeout);
+  redirect_nostdin nostdin = redirect_nostdin();
+  return ::spawn(DAEMON, nostdin, sleeper);
 }
diff --git a/frysk-sys/frysk/testbed/cni/Tee.cxx b/frysk-sys/frysk/testbed/jni/ForkFactory.cxx
similarity index 76%
rename from frysk-sys/frysk/testbed/cni/Tee.cxx
rename to frysk-sys/frysk/testbed/jni/ForkFactory.cxx
index e14d4d2..034c596 100644
--- a/frysk-sys/frysk/testbed/cni/Tee.cxx
+++ b/frysk-sys/frysk/testbed/jni/ForkFactory.cxx
@@ -1,6 +1,6 @@
 // This file is part of the program FRYSK.
 //
-// Copyright 2007, 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
@@ -37,18 +37,35 @@
 // version and license this file solely under the GPL without
 // exception.
 
+#include <stdint.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <errno.h>
 
-#include <gcj/cni.h>
+#include "jni.hxx"
 
-#include "frysk/testbed/Tee.h"
+#include "jnixx/elements.hxx"
+#include "frysk/sys/jni/Fork.hxx"
 
-void
-frysk::testbed::Tee::execute ()
-{
-  char b;
-  while (::read (STDIN_FILENO, &b, 1) > 0) {
-    ::write (STDOUT_FILENO, &b, 1);
+class exec_sleep : public exec {
+private:
+  int timeout;
+public:
+  exec_sleep(int timeout) {
+    this->timeout = timeout;
   }
+  void execute() {
+    int remaining = timeout;
+    do
+      remaining -= ::sleep(remaining);
+    while (remaining > 0);
+    ::_exit(0);
+  }
+};
+
+jint
+frysk::testbed::ForkFactory::fork(jnixx::env env, jint timeout) {
+  exec_sleep sleeper = exec_sleep(timeout);
+  redirect_nostdin nostdin = redirect_nostdin();
+  return ::spawn(env, DAEMON, nostdin, sleeper);
 }
diff --git a/frysk-sys/jnixx/ChangeLog b/frysk-sys/jnixx/ChangeLog
index d94d3ed..a214ae7 100644
--- a/frysk-sys/jnixx/ChangeLog
+++ b/frysk-sys/jnixx/ChangeLog
@@ -1,5 +1,8 @@
 2008-05-22  Andrew Cagney  <cagney@redhat.com>
 
+	* exceptions.cxx (errnoException): Pass up error, not errno.
+	(errnoException): Ditto.
+
 	* exceptions.cxx (errnoException): Use vasprintf, not snprintf.
 	(runtimeException): Simplify exception checks; throw RuntimeException.
 	* print.cxx (vajprintf): Ditto.
diff --git a/frysk-sys/jnixx/exceptions.cxx b/frysk-sys/jnixx/exceptions.cxx
index f02d8f9..2f5ce80 100644
--- a/frysk-sys/jnixx/exceptions.cxx
+++ b/frysk-sys/jnixx/exceptions.cxx
@@ -102,7 +102,7 @@ throwErrno(::jnixx::env& env, int error, const char *fmt, ...) {
 
 void
 errnoException(::jnixx::env& env, int error, const char *prefix) {
-  throwErrno(env, errno, "%s: %s", prefix, strerror(error));
+  throwErrno(env, error, "%s: %s", prefix, strerror(error));
 }
 
 void
@@ -121,7 +121,7 @@ errnoException(::jnixx::env& env, int error, const char *prefix,
   }
   va_end(ap);
   try {
-    throwErrno(env, errno, "%s: %s (%s)", prefix, strerror(error), message);
+    throwErrno(env, error, "%s: %s (%s)", prefix, strerror(error), message);
   } catch (java::lang::Throwable e) {
     // always executed.
     ::free(message);


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


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

only message in thread, other threads:[~2008-05-22 17:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-22 17:44 [SCM] master: Re-implement frysk.testbed.ForkFactory using Fork.spawn 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).