public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: cagney@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Pass a Signal through WaitBuilder .terminated and .exitEvent.
Date: Tue, 22 Jan 2008 18:37:00 -0000	[thread overview]
Message-ID: <20080122183757.28105.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  a99507d78618aa744a397a231de9646d506f7394 (commit)
      from  ff8a7920dbc285868c8bafab1c30d6fb378ef76b (commit)

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

- Log -----------------------------------------------------------------
commit a99507d78618aa744a397a231de9646d506f7394
Author: Andrew Cagney <cagney@redhat.com>
Date:   Tue Jan 22 13:37:25 2008 -0500

    Pass a Signal through WaitBuilder .terminated and .exitEvent.
    
    frysk-core/frysk/proc/live/ChangeLog
    2008-01-22  Andrew Cagney  <cagney@redhat.com>
    
    	* LinuxWaitBuilder.java: Update to match
    	WaitBuilder.exitEvent(int,Signal,int,boolean) and
    	WaitBuilder.terminated(int,Signal,int,boolean).
    
    frysk-core/frysk/testbed/ChangeLog
    2008-01-22  Andrew Cagney  <cagney@redhat.com>
    
    	* LegacyOffspring.java: Update to match
    	WaitBuilder.terminated(int,Signal,int,boolean) and
    	WaitBuilder.exitEvent(int,Signal,int,boolean).
    	* SlaveOffspring.java: Ditto.
    
    frysk-sys/frysk/expunit/ChangeLog
    2008-01-22  Andrew Cagney  <cagney@redhat.com>
    
    	* Expect.java (expectTermination(Signal)): New.
    	* TestExpect.java: Update.
    	* TerminationException.java (TerminationException(Signal, int,
    	String)): Replace TerminationException(int).
    	* WaitObserver.java (WaitObserver(Signal)): New.
    	(exitEvent(int,Signal,int,boolean)): Replace
    	exitEvent(int,boolean,int,boolean).
    	(terminated(int,Signal,int,boolean)): Replace
    	terminated(int,boolean,int,boolean.
    
    frysk-sys/frysk/sys/ChangeLog
    2008-01-22  Andrew Cagney  <cagney@redhat.com>
    
    	* WaitBuilder.java (terminated(int,Signal,int,boolean)): Replace
    	terminated(int,boolean,int,boolean).
    	(exitEvent(int,Signal,int)): Replace exitEvent(int,boolean,int).
    	* cni/Wait.cxx (processStatus): Update.
    	* UnhandledWaitBuilder.java: Update.
    	* TestFork.java: Update.
    
    frysk-sys/frysk/testbed/ChangeLog
    2008-01-22  Andrew Cagney  <cagney@redhat.com>
    
    	* TearDownProcess.java: Update to match
    	WaitBuilder.terminating(int,Signal,int,boolean) and
    	WaitBuilder.exitEvent(int,Signal,int,boolean).

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

Summary of changes:
 frysk-core/frysk/proc/live/ChangeLog              |    6 ++
 frysk-core/frysk/proc/live/LinuxWaitBuilder.java  |   23 ++++---
 frysk-core/frysk/testbed/ChangeLog                |    7 ++
 frysk-core/frysk/testbed/LegacyOffspring.java     |    8 +-
 frysk-core/frysk/testbed/SlaveOffspring.java      |    8 +-
 frysk-sys/frysk/expunit/ChangeLog                 |   12 ++++
 frysk-sys/frysk/expunit/Expect.java               |   23 +++++--
 frysk-sys/frysk/expunit/TerminationException.java |   18 +++---
 frysk-sys/frysk/expunit/TestExpect.java           |    7 +-
 frysk-sys/frysk/expunit/WaitObserver.java         |   73 +++++++++------------
 frysk-sys/frysk/sys/ChangeLog                     |    9 +++
 frysk-sys/frysk/sys/TestFork.java                 |   14 ++--
 frysk-sys/frysk/sys/TestPipePair.java             |   16 ++--
 frysk-sys/frysk/sys/TestPtrace.java               |   13 ++--
 frysk-sys/frysk/sys/TestWait.java                 |   54 +++++++---------
 frysk-sys/frysk/sys/UnhandledWaitBuilder.java     |   35 +++++------
 frysk-sys/frysk/sys/WaitBuilder.java              |   19 +++---
 frysk-sys/frysk/sys/cni/Wait.cxx                  |   26 +++++---
 frysk-sys/frysk/testbed/ChangeLog                 |    6 ++
 frysk-sys/frysk/testbed/TearDownProcess.java      |   10 ++--
 20 files changed, 211 insertions(+), 176 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog
index 26334fd..093b9f2 100644
--- a/frysk-core/frysk/proc/live/ChangeLog
+++ b/frysk-core/frysk/proc/live/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-22  Andrew Cagney  <cagney@redhat.com>
+
+	* LinuxWaitBuilder.java: Update to match
+	WaitBuilder.exitEvent(int,Signal,int,boolean) and
+	WaitBuilder.terminated(int,Signal,int,boolean).
+
 2008-01-21  Andrew Cagney  <cagney@redhat.com>
 
 	* LinuxWaitBuilder.java: Update to match
diff --git a/frysk-core/frysk/proc/live/LinuxWaitBuilder.java b/frysk-core/frysk/proc/live/LinuxWaitBuilder.java
index 2f0edab..aa203f4 100644
--- a/frysk-core/frysk/proc/live/LinuxWaitBuilder.java
+++ b/frysk-core/frysk/proc/live/LinuxWaitBuilder.java
@@ -1,6 +1,6 @@
 // This file is part of the program FRYSK.
 //
-// Copyright 2005, 2006, 2007, Red Hat Inc.
+// Copyright 2005, 2006, 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
@@ -55,9 +55,7 @@ import frysk.proc.TaskObserver;
  * Handles wait events generated by the wait builder.
  */
 
-class LinuxWaitBuilder
-    implements WaitBuilder
-{
+class LinuxWaitBuilder implements WaitBuilder {
     LinuxWaitBuilder (LinuxPtraceHost host)
     {
 	searchId = new SearchId (host);
@@ -164,15 +162,17 @@ class LinuxWaitBuilder
 	attemptDeliveringFsckedKernelEvents ();
     }
     
-    public void exitEvent (int pid, boolean signal, int value,
-			   boolean coreDumped)
+    public void exitEvent(int pid, Signal signal, int status,
+			  boolean coreDumped)
     {
         LinuxPtraceTask task = searchId.get(pid, "{0} exitEvent\n");
 	if (task == null)
 	    // Stray pid from uncontrolled fork.
 	    logMissing("exited", pid);
+	else if (signal != null)
+	    task.processTerminatingEvent(true, signal.intValue());
 	else
-	    task.processTerminatingEvent(signal, value);
+	    task.processTerminatingEvent(false, status);
     }
     
     public void execEvent (int pid)
@@ -217,14 +217,15 @@ class LinuxWaitBuilder
             task.processSignaledEvent(sig.intValue());
     }
     
-    public void terminated (int pid, boolean signal, int value,
-			    boolean coreDumped)
-    {
+    public void terminated(int pid, Signal signal, int status,
+			   boolean coreDumped) {
         LinuxPtraceTask task = searchId.get(pid, "{0} terminated\n");
 	if (task == null)
 	    // Stray pid from uncontrolled fork.
 	    logMissing("terminated", pid);
+	else if (signal != null)
+	    task.processTerminatedEvent(true, signal.intValue());
 	else
-	    task.processTerminatedEvent(signal, value);
+	    task.processTerminatedEvent(false, status);
     }
 }
diff --git a/frysk-core/frysk/testbed/ChangeLog b/frysk-core/frysk/testbed/ChangeLog
index 0436377..e7f2ede 100644
--- a/frysk-core/frysk/testbed/ChangeLog
+++ b/frysk-core/frysk/testbed/ChangeLog
@@ -1,3 +1,10 @@
+2008-01-22  Andrew Cagney  <cagney@redhat.com>
+
+	* LegacyOffspring.java: Update to match
+	WaitBuilder.terminated(int,Signal,int,boolean) and
+	WaitBuilder.exitEvent(int,Signal,int,boolean).
+	* SlaveOffspring.java: Ditto.
+
 2008-01-17  Andrew Cagney  <cagney@redhat.com>
 
 	* SlaveOffspring.java (assertSendStop()): Move from here ...
diff --git a/frysk-core/frysk/testbed/LegacyOffspring.java b/frysk-core/frysk/testbed/LegacyOffspring.java
index d892e7a..45aefba 100644
--- a/frysk-core/frysk/testbed/LegacyOffspring.java
+++ b/frysk-core/frysk/testbed/LegacyOffspring.java
@@ -237,12 +237,12 @@ public class LegacyOffspring
 			protected void unhandled (String why) {
 			    TestCase.fail ("killing child (" + why + ")");
 			}
-			public void terminated (int pid, boolean signal,
-						int value,
-						boolean coreDumped) {
+			public void terminated(int pid, Signal signal,
+					       int value,
+					       boolean coreDumped) {
 			    // Termination with signal is ok.
 			    TestCase.assertTrue("terminated with signal",
-						signal);
+						signal != null);
 			}
 		    });
 	    }
diff --git a/frysk-core/frysk/testbed/SlaveOffspring.java b/frysk-core/frysk/testbed/SlaveOffspring.java
index 022156d..bd46a23 100644
--- a/frysk-core/frysk/testbed/SlaveOffspring.java
+++ b/frysk-core/frysk/testbed/SlaveOffspring.java
@@ -244,12 +244,12 @@ public class SlaveOffspring
 			protected void unhandled (String why) {
 			    TestCase.fail ("killing child (" + why + ")");
 			}
-			public void terminated (int pid, boolean signal,
-						int value,
-						boolean coreDumped) {
+			public void terminated(int pid, Signal signal,
+					       int value,
+					       boolean coreDumped) {
 			    // Termination with signal is ok.
 			    TestCase.assertTrue("terminated with signal",
-						signal);
+						signal != null);
 			}
 		    });
 	    }
diff --git a/frysk-sys/frysk/expunit/ChangeLog b/frysk-sys/frysk/expunit/ChangeLog
index dff3059..0ff37e8 100644
--- a/frysk-sys/frysk/expunit/ChangeLog
+++ b/frysk-sys/frysk/expunit/ChangeLog
@@ -1,3 +1,15 @@
+2008-01-22  Andrew Cagney  <cagney@redhat.com>
+
+	* Expect.java (expectTermination(Signal)): New.
+	* TestExpect.java: Update.
+	* TerminationException.java (TerminationException(Signal, int,
+	String)): Replace TerminationException(int).
+	* WaitObserver.java (WaitObserver(Signal)): New.
+	(exitEvent(int,Signal,int,boolean)): Replace
+	exitEvent(int,boolean,int,boolean).
+	(terminated(int,Signal,int,boolean)): Replace
+	terminated(int,boolean,int,boolean.
+
 2008-01-21  Andrew Cagney  <cagney@redhat.com>
 
 	* WaitObserver.java: Update to match
diff --git a/frysk-sys/frysk/expunit/Expect.java b/frysk-sys/frysk/expunit/Expect.java
index 4195d48..1e4809c 100644
--- a/frysk-sys/frysk/expunit/Expect.java
+++ b/frysk-sys/frysk/expunit/Expect.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
@@ -335,18 +335,27 @@ public class Expect
     }
 
     /**
-     * Expect the child process to have terminated.  A +ve or zero
-     * value indicates an exit status, a -ve value indicates
-     * termination with signal.
+     * Expect the child process to exit with status.
      */
-    public void expectTermination (final int status)
-    {
+    public void expectTermination(int status) {
+	try {
+	    expect ();
+	}
+	catch (EndOfFileException e) {
+	    // This is blocking; which probably isn't good.
+	    pid.blockingWait(new WaitObserver(status));
+	}
+    }
+    /**
+     * Expect the child process to be terminated by SIGNAL.
+     */
+    public void expectTermination(Signal signal) {
 	try {
 	    expect ();
 	}
 	catch (EndOfFileException e) {
 	    // This is blocking; which probably isn't good.
-	    pid.blockingWait (new WaitObserver (status));
+	    pid.blockingWait(new WaitObserver(signal));
 	}
     }
 }
diff --git a/frysk-sys/frysk/expunit/TerminationException.java b/frysk-sys/frysk/expunit/TerminationException.java
index 7c69c9f..2f126e0 100644
--- a/frysk-sys/frysk/expunit/TerminationException.java
+++ b/frysk-sys/frysk/expunit/TerminationException.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
@@ -39,6 +39,8 @@
 
 package frysk.expunit;
 
+import frysk.sys.Signal;
+
 /**
  * Thrown an an end-of-file is encountered and nothing else matches.
  */
@@ -47,15 +49,13 @@ public class TerminationException
     extends RuntimeException
 {
     static final long serialVersionUID = 1;
-    static private String expecting (int expectedStatus)
-    {
-	if (expectedStatus >= 0)
-	    return " (expecting exit with status " + expectedStatus + ")";
+    static private String expecting(Signal expectedSignal, int expectedStatus) {
+	if (expectedSignal != null)
+	    return " (expecting kill with signal " + expectedSignal + ")";
 	else
-	    return " (expecting kill with signal " + expectedStatus + ")";
+	    return " (expecting exit with status " + expectedStatus + ")";
     }
-    TerminationException (int expectedStatus, String s)
-    {
-	super (s + expecting (expectedStatus));
+    TerminationException(Signal expectedSignal, int expectedStatus, String s) {
+	super (s + expecting(expectedSignal, expectedStatus));
     }
 }
diff --git a/frysk-sys/frysk/expunit/TestExpect.java b/frysk-sys/frysk/expunit/TestExpect.java
index 9b487bf..c3d792e 100644
--- a/frysk-sys/frysk/expunit/TestExpect.java
+++ b/frysk-sys/frysk/expunit/TestExpect.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
@@ -98,10 +98,9 @@ public class TestExpect
     /**
      * Check the signal status.
      */
-    public void testKill ()
-    {
+    public void testKill() {
 	e = new Expect ("kill -HUP $$");
-	e.expectTermination (-Signal.HUP.intValue());
+	e.expectTermination(Signal.HUP);
     }
 
     /**
diff --git a/frysk-sys/frysk/expunit/WaitObserver.java b/frysk-sys/frysk/expunit/WaitObserver.java
index 378c2f2..7ed630e 100644
--- a/frysk-sys/frysk/expunit/WaitObserver.java
+++ b/frysk-sys/frysk/expunit/WaitObserver.java
@@ -43,61 +43,52 @@ import frysk.sys.Signal;
 import frysk.sys.WaitBuilder;
 
 class WaitObserver implements WaitBuilder {
+    private final Signal expectedSignal;
     private final int expectedStatus;
     /**
      * Observe wait status, expecting a specific termination value.
      */
-    WaitObserver (int expectedStatus)
-    {
+    WaitObserver(int expectedStatus) {
+	this.expectedSignal = null;
 	this.expectedStatus = expectedStatus;
     }
-    public void disappeared (int pid, Throwable t)
-    {
-	throw new TerminationException (expectedStatus, "Process disappeared");
+    WaitObserver(Signal expectedSignal) {
+	this.expectedSignal = expectedSignal;
+	this.expectedStatus = -1;
     }
-    public void terminated (int pid, boolean signal, int value,
-			    boolean coreDumped)
-    {
-	if (signal) {
-	    if (expectedStatus != -value)
-		throw new TerminationException (expectedStatus,
-						"Killed with signal "
-						+ value);
-	}
-	else {
-	    if (expectedStatus != value)
-		throw new TerminationException (expectedStatus,
-						"Exited with status " + value);
+    private RuntimeException terminationException(String msg) {
+	return new TerminationException(expectedSignal, expectedStatus, msg);
+    }
+    public void disappeared(int pid, Throwable t) {
+	throw terminationException("Process disappeared");
+    }
+    public void terminated(int pid, Signal signal, int status,
+			   boolean coreDumped) {
+	if (signal != null) {
+	    if (signal != expectedSignal)
+		throw terminationException("Killed with signal " + signal);
+	} else {
+	    if (status != expectedStatus)
+		throw terminationException("Exited with status " + status);
 	}
     }
     public void stopped(int pid, Signal signal) {
-	throw new TerminationException(expectedStatus,
-				       "Stopped with signal " + signal);
+	throw terminationException("Stopped with signal " + signal);
     }
-    public void syscallEvent (int pid)
-    {
-	throw new TerminationException (expectedStatus,
-					"Stopped with syscall event");
+    public void syscallEvent (int pid) {
+	throw terminationException("Stopped with syscall event");
     }
-    public void execEvent (int pid)
-    {
-	throw new TerminationException (expectedStatus,
-					"Stopped with exec event");
+    public void execEvent (int pid) {
+	throw terminationException("Stopped with exec event");
     }
-    public void exitEvent (int pid, boolean signal,
-			   int value, boolean coreDumped)
-    {
-	throw new TerminationException (expectedStatus,
-					"Stopped with exit event");
+    public void exitEvent(int pid, Signal signal,
+			  int status, boolean coreDumped) {
+	throw terminationException("Stopped with exit event");
     }
-    public void forkEvent (int pid, int offspring)
-    {
-	throw new TerminationException (expectedStatus,
-					"Stopped with fork event");
+    public void forkEvent (int pid, int offspring) {
+	throw terminationException("Stopped with fork event");
     }
-    public void cloneEvent (int pid, int offspring)
-    {
-	throw new TerminationException (expectedStatus,
-					"Stopped with clone event");
+    public void cloneEvent (int pid, int offspring) {
+	throw terminationException("Stopped with clone event");
     }
 }
diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog
index 5463eaf..bdfbd7b 100644
--- a/frysk-sys/frysk/sys/ChangeLog
+++ b/frysk-sys/frysk/sys/ChangeLog
@@ -1,3 +1,12 @@
+2008-01-22  Andrew Cagney  <cagney@redhat.com>
+
+	* WaitBuilder.java (terminated(int,Signal,int,boolean)): Replace
+	terminated(int,boolean,int,boolean).
+	(exitEvent(int,Signal,int)): Replace exitEvent(int,boolean,int).
+	* cni/Wait.cxx (processStatus): Update.
+	* UnhandledWaitBuilder.java: Update.
+	* TestFork.java: Update.
+
 2008-01-21  Andrew Cagney  <cagney@redhat.com>
 
 	* WaitBuilder.java (stopped(int,Signal)): Replace stopped(int,int).
diff --git a/frysk-sys/frysk/sys/TestFork.java b/frysk-sys/frysk/sys/TestFork.java
index e908d35..308b785 100644
--- a/frysk-sys/frysk/sys/TestFork.java
+++ b/frysk-sys/frysk/sys/TestFork.java
@@ -86,16 +86,16 @@ public class TestFork
 	// Capture the child's status; to see if it was correct.
 	class ExitStatus extends UnhandledWaitBuilder {
 	    int pid;
-	    boolean signal;
-	    int value;
-	    public void terminated(int pid, boolean signal, int value,
+	    Signal signal;
+	    int status;
+	    public void terminated(int pid, Signal signal, int status,
 				   boolean coreDumped) {
 		logger.log(Level.FINE,
 			   "exited with status {0,number,integer}\n",
-			   new Integer(value));
+			   new Integer(status));
 		this.pid = pid;
 		this.signal = signal;
-		this.value = value;
+		this.status = status;
 	    }
 	    public void unhandled(String reason) {
 		fail(reason);
@@ -112,7 +112,7 @@ public class TestFork
 		  getTimeoutMilliseconds());
 	// (a timeout will also fail with the below)
 	assertEquals("pid", pid, exitStatus.pid);
-	assertEquals("signal", false, exitStatus.signal);
-	assertEquals("status", 0, exitStatus.value);
+	assertEquals("signal", null, exitStatus.signal);
+	assertEquals("status", 0, exitStatus.status);
     }
 }
diff --git a/frysk-sys/frysk/sys/TestPipePair.java b/frysk-sys/frysk/sys/TestPipePair.java
index 4151206..2c0f786 100644
--- a/frysk-sys/frysk/sys/TestPipePair.java
+++ b/frysk-sys/frysk/sys/TestPipePair.java
@@ -168,16 +168,16 @@ public class TestPipePair
 	// Capture the child's output (look for 
 	class ExitStatus extends UnhandledWaitBuilder {
 	    int pid;
-	    boolean signal;
-	    int value;
-	    public void terminated(int pid, boolean signal, int value,
+	    Signal signal;
+	    int status;
+	    public void terminated(int pid, Signal signal, int status,
 				   boolean coreDumped) {
 		logger.log(Level.FINE,
 			   "exited with status {0,number,integer}\n",
-			   new Integer(value));
+			   new Integer(status));
 		this.pid = pid;
 		this.signal = signal;
-		this.value = value;
+		this.status = status;
 	    }
 	    public void unhandled(String reason) {
 		fail(reason);
@@ -193,8 +193,8 @@ public class TestPipePair
 		  },
 		  getTimeoutMilliseconds() * 10);
 	// (a timeout will also fail with the below)
-	assertEquals("pid", pipe.pid.hashCode(), exitStatus.pid);
-	assertEquals("signal", false, exitStatus.signal);
-	assertEquals("status", 0, exitStatus.value);
+	assertEquals("pid", pipe.pid.intValue(), exitStatus.pid);
+	assertEquals("signal", null, exitStatus.signal);
+	assertEquals("status", 0, exitStatus.status);
     }
 }
diff --git a/frysk-sys/frysk/sys/TestPtrace.java b/frysk-sys/frysk/sys/TestPtrace.java
index 9e2ba5b..6254e7a 100644
--- a/frysk-sys/frysk/sys/TestPtrace.java
+++ b/frysk-sys/frysk/sys/TestPtrace.java
@@ -104,13 +104,12 @@ public class TestPtrace
 		{
 		    fail (why);
 		}
-		public void terminated (int pid, boolean signal, int value,
-					boolean coreDumped)
-		{
-		    assertEquals ("terminated pid", id, pid);
-		    assertEquals ("terminated signal", true, signal);
-		    assertEquals ("terminated value", Signal.TERM,
-				  Signal.valueOf(value));
+		public void terminated(int pid, Signal signal, int status,
+				       boolean coreDumped) {
+		    assertEquals("terminated pid", id, pid);
+		    assertEquals("terminated signal", Signal.TERM, signal);
+		    assertEquals("terminated status", -Signal.TERM.intValue(),
+				 status);
 		}
 	    });
     }
diff --git a/frysk-sys/frysk/sys/TestWait.java b/frysk-sys/frysk/sys/TestWait.java
index 1fda592..ab51104 100644
--- a/frysk-sys/frysk/sys/TestWait.java
+++ b/frysk-sys/frysk/sys/TestWait.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
@@ -150,45 +150,39 @@ public class TestWait
     /**
      * Class to capture termination information.
      */
-    private static class WaitOnChild
-	extends UnhandledWaitBuilder


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


                 reply	other threads:[~2008-01-22 18:37 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=20080122183757.28105.qmail@sourceware.org \
    --to=cagney@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: link
Be 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).