[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
OpenLDAP, Linux/Alpha, and signals
OpenLDAP needs two signals to work correctly. As the
glibc implementation of pthreads uses SIGUSR1 and SIGUSR2,
an #ifdef HAVE_LINUX_THREADS chooses SIGSTKFLT and SIGUNUSED
for Linux platforms in slapd and slurpd.
Unfortunately, for various practical and historical reasons,
Linux/Alpha does not have the same signum.h as Linux/Intel,
and in fact Linux/Alpha has neither SIGSTKFLT nor SIGUNUSED.
This obviously causes problems, and slurpd and slapd don't
compile.
As a quick hack, I changed SIGSTKFLT and SIGUNUSED to
SIGSYS and SIGINFO, and the build completes successfully and
slapd seems to work. (Which is to say, I can import
a simple LDIF and talk to a running slapd via Netscape's
Java LDAP SDK.) I have not tested slurpd.
The reason I chose SIGSYS and SIGINFO is because they are
present on Linux/Alpha but not Linux/Intel. I am guessing
they are safe to use because if Linux/Intel doesn't have
them, they're probably not used by any Linux system libraries,
which tend to be Intel-centric and ported to the Alpha.
However, I don't KNOW this for certain.
This affects slapd and slurpd, and perhaps ldapd as well,
though I have not attempted to build ldapd.
There seem to be three ways to fix this:
* add a feature to autoconf that selects two
signals to use depending on the architecture
when HAVE_LINUX_THREADS is #defined
* try and find two unused signals that exist
on both Linux/Alpha and Linux/Intel (and
Linux/Sparc, and MkLinux, et al as well...?)
* get the kernel folk to add SIGUSR3 and SIGUSR4
to all platform kernel versions :)
I'm glad to help resolve this any way I can, but I have little
(read: practically no) experience with autoconf.
Attached is the /usr/include/signum.h from my Linux/Alpha box
if it will help anyone. The "executive summary":
Signals present on Linux/Intel but not on Linux/Alpha:
#define SIGIOT 6 /* IOT trap (4.2 BSD). */
#define SIGPOLL SIGIO /* Pollable event occurred (System V). */
#define SIGSTKFLT 16 /* ??? */
#define SIGPWR 30 /* Power failure restart (System V). */
#define SIGUNUSED 31
Signals present on Linux/Alpha but not on Linux/Intel:
#define SIGEMT 7
#define SIGSYS 12
#define SIGINFO 29
Dan Morrill
Computer Scientist
GE Corporate R&D
******************
My views are my own, and may not reflect those of my employer.
/* Signal number definitions. Linux/Alpha version.
Copyright (C) 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#ifdef _SIGNAL_H
/* Fake signal functions. */
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
/*
* Linux/AXP has different signal numbers that Linux/i386: I'm trying
* to make it OSF/1 binary compatible, at least for normal binaries.
*/
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGEMT 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGBUS 10
#define SIGSEGV 11
#define SIGSYS 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGURG 16
#define SIGSTOP 17
#define SIGTSTP 18
#define SIGCONT 19
#define SIGCHLD 20
#define SIGCLD SIGCHLD
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGIO 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGINFO 29
#define SIGUSR1 30
#define SIGUSR2 31
#define SIGPOLL SIGIO
#define SIGPWR SIGINFO
#define SIGIOT SIGABRT
#define _NSIG 32 /* Biggest signal number + 1. */
#endif /* <signal.h> included. */