From 41c7e5acbcf8e5f8bf325e3e936ff40d9aa4d090 Mon Sep 17 00:00:00 2001 From: Landon Fuller Date: Tue, 19 Dec 2006 19:47:04 +0000 Subject: [PATCH] Let's use one copy of this identical code, too. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4490 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- ...com_threerings_util_signal_SignalManager.c | 97 +------------------ 1 file changed, 1 insertion(+), 96 deletions(-) mode change 100644 => 120000 src/java/com/threerings/util/signal/Linux/com_threerings_util_signal_SignalManager.c diff --git a/src/java/com/threerings/util/signal/Linux/com_threerings_util_signal_SignalManager.c b/src/java/com/threerings/util/signal/Linux/com_threerings_util_signal_SignalManager.c deleted file mode 100644 index a0852ad66..000000000 --- a/src/java/com/threerings/util/signal/Linux/com_threerings_util_signal_SignalManager.c +++ /dev/null @@ -1,96 +0,0 @@ -/** - * $Id: com_threerings_util_signal_SignalManager.c 3327 2005-02-03 01:02:58Z mdb $ - */ - -#include -#include -#include -#include - -#include -#include "com_threerings_util_signal_SignalManager.h" - -static int writefd; - -typedef void (*sighandler_t)(int); -static sighandler_t old_handlers[64]; -static sighandler_t handlers[64]; - -static void -signal_handler (int signo) -{ - write(writefd, &signo, sizeof(signo)); - signal(SIGINT, signal_handler); -} - -/** - * Class: com_threerings_util_signal_SignalManager - * Method: activateHandler - * Signature: (I)V - */ -JNIEXPORT void JNICALL -Java_com_threerings_util_signal_SignalManager_activateHandler ( - JNIEnv* env, jclass clazz, jint signo) -{ - old_handlers[signo] = signal(signo, signal_handler); - if (old_handlers[signo] == SIG_ERR) { - fprintf(stderr, "Error setting signal handler (%d): %s\n", - signo, strerror(errno)); - old_handlers[signo] = 0; - } else { - handlers[signo] = signal_handler; - } -} - -/** - * Class: com_threerings_util_signal_SignalManager - * Method: deactivateHandler - * Signature: (I)V - */ -JNIEXPORT void JNICALL -Java_com_threerings_util_signal_SignalManager_deactivateHandler ( - JNIEnv* env, jclass clazz, jint signo) -{ - if (old_handlers[signo] != 0) { - signal(signo, old_handlers[signo]); - old_handlers[signo] = 0; - handlers[signo] = 0; - } -} - -/** - * Class: com_threerings_util_signal_SignalManager - * Method: dispatchSignals - * Signature: ()V - */ -JNIEXPORT void JNICALL -Java_com_threerings_util_signal_SignalManager_dispatchSignals ( - JNIEnv* env, jclass clazz) -{ - int filedes[2], readfd; - jint signo; - jmethodID mid = (*env)->GetStaticMethodID( - env, clazz, "signalReceived", "(I)V"); - - if (pipe(filedes) < 0) { - fprintf(stderr, "Failed to create signal pipe: %s\n", strerror(errno)); - return; - } - readfd = filedes[0]; - writefd = filedes[1]; - - while (1) { - int got = read(readfd, &signo, sizeof(int)); - if (got < 0) { - fprintf(stderr, "Signal pipe read failed: %s\n", strerror(errno)); - } else if (got == 0) { - fprintf(stderr, "Signal pipe read returned zero bytes.\n"); - } else { - if (signo < 0 || signo >= 64 || handlers[signo] == 0) { - fprintf(stderr, "Received bogus signal (%d).\n", signo); - } else { - (*env)->CallStaticVoidMethod(env, clazz, mid, signo); - } - } - } -} diff --git a/src/java/com/threerings/util/signal/Linux/com_threerings_util_signal_SignalManager.c b/src/java/com/threerings/util/signal/Linux/com_threerings_util_signal_SignalManager.c new file mode 120000 index 000000000..8e15e94bd --- /dev/null +++ b/src/java/com/threerings/util/signal/Linux/com_threerings_util_signal_SignalManager.c @@ -0,0 +1 @@ +../FreeBSD/com_threerings_util_signal_SignalManager.c \ No newline at end of file