[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,
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

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
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 _NSIG           32      /* Biggest signal number + 1.  */

#endif  /* <signal.h> included.  */