From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3770 invoked by alias); 22 Jan 2008 03:08:54 -0000 Received: (qmail 3744 invoked by uid 367); 22 Jan 2008 03:08:53 -0000 Date: Tue, 22 Jan 2008 03:08:00 -0000 Message-ID: <20080122030852.3729.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Use an array for known signals. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 01e4144f085eb072e2210b4a5cb6a0e8c8d12fd6 X-Git-Newrev: 137e1fd0edb8b159a08f9d62d681181eacc80a9b 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/msg00097.txt.bz2 The branch, master has been updated via 137e1fd0edb8b159a08f9d62d681181eacc80a9b (commit) from 01e4144f085eb072e2210b4a5cb6a0e8c8d12fd6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 137e1fd0edb8b159a08f9d62d681181eacc80a9b Author: Andrew Cagney Date: Mon Jan 21 22:08:25 2008 -0500 Use an array for known signals. frysk-sys/frysk/sys/ChangeLog 2008-01-21 Andrew Cagney * cni/Signal.cxx-sh (frysk): Update. * Signal.java-sh (signals): Use an array. (nsig(), rtMin(), rtMax()): New. * TestSignal.java (testUnknown()): New. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/sys/ChangeLog | 7 +++ frysk-sys/frysk/sys/Signal.java-sh | 78 +++++++++++++++++++++----------- frysk-sys/frysk/sys/TestSignal.java | 16 +++++-- frysk-sys/frysk/sys/cni/Signal.cxx-sh | 15 ++++++ 4 files changed, 84 insertions(+), 32 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog index 8275d0a..ea84c2d 100644 --- a/frysk-sys/frysk/sys/ChangeLog +++ b/frysk-sys/frysk/sys/ChangeLog @@ -1,5 +1,12 @@ 2008-01-21 Andrew Cagney + * cni/Signal.cxx-sh (frysk): Update. + * Signal.java-sh (signals): Use an array for known signals. + (unknownSignals): New. + (rtSignals): New. + (nsig(), rtMin(), rtMax()): New. + * TestSignal.java (testUnknown()): New. + * TestSignal.java: New file. * cni/Signal.cxx: Replace this with ... * cni/Signal.cxx-sh (frysk): ... this. New file. diff --git a/frysk-sys/frysk/sys/Signal.java-sh b/frysk-sys/frysk/sys/Signal.java-sh index b1f337a..0f433a9 100644 --- a/frysk-sys/frysk/sys/Signal.java-sh +++ b/frysk-sys/frysk/sys/Signal.java-sh @@ -41,6 +41,7 @@ cat <= rtMin() && signum <= rtMax()) { + return rtSignals[signum - rtMin()]; + } else { + // Fudge up a signal; beter than throwing an exception. + synchronized (unknownSignals) { + scratchSignal.signum = signum; + Signal signal = (Signal)unknownSignals.get(scratchSignal); + if (signal != null) + return signal; + signal = new Signal(signum, "SIG" + signum); + unknownSignals.put(signal, signal); + return signal; + } + } + } + /** * A scratch value for searching the signal table. */ private static class ScratchSignal extends Signal { ScratchSignal() { - super(0, ""); - } + super(0, ""); + } int signum; public int hashCode() { - return signum; + return signum; } } + private static final Map unknownSignals = new WeakHashMap(); private static final ScratchSignal scratchSignal = new ScratchSignal(); + /** - * A map for looking up known signals; weak so that scratch + * Tables for looking up known signals; weak so that scratch * signals do not accumulate. */ - private static final Map signals = new WeakHashMap(); - /** - * Given an integer, return (or create) the corresponding signal. - */ - public static Signal valueOf(int signum) { - if (signum < 0) - throw new NullPointerException("invalid signal: " + signum); - synchronized (scratchSignal) { - scratchSignal.signum = signum; - Signal signal = (Signal)signals.get(scratchSignal); - if (signal == null) - return signalFactory(signum, "SIG" + signum); - else - return signal; - } - } - + private static native int nsig(); + private static native int rtMin(); + private static native int rtMax(); + private static final Signal[] signals = new Signal[nsig()]; + private static final Signal[] rtSignals = new Signal[rtMax()-rtMin()+1]; /** * Create a signal, also enter the signal into the signals table * for later retrieval. */ private static Signal signalFactory(int sig, String name) { - if (sig >= 0) { - Signal signal = new Signal(sig, name); - signals.put(signal, signal); - return signal; - } else - return null; // Return a known value? + if (sig < 0) + return null; + Signal signal = new Signal(sig, name); + if (signals[sig] == null) + signals[sig] = signal; + return signal; } public static final Signal NONE = signalFactory(0, "SIGNONE"); @@ -202,5 +221,10 @@ do done cat <