diff options
Diffstat (limited to 'contrib/sendmail/include/sm/signal.h')
-rw-r--r-- | contrib/sendmail/include/sm/signal.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/contrib/sendmail/include/sm/signal.h b/contrib/sendmail/include/sm/signal.h new file mode 100644 index 0000000..3821deb --- /dev/null +++ b/contrib/sendmail/include/sm/signal.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Id: signal.h,v 1.16 2001/07/20 19:48:21 gshapiro Exp $ + */ + +/* +** SIGNAL.H -- libsm (and sendmail) signal facilities +** Extracted from sendmail/conf.h and focusing +** on signal configuration. +*/ + +#ifndef SM_SIGNAL_H +#define SM_SIGNAL_H 1 + +#include <sys/types.h> +#include <limits.h> +#include <signal.h> +#include <sm/cdefs.h> +#include <sm/conf.h> + +/* +** Critical signal sections +*/ + +#define PEND_SIGHUP 0x0001 +#define PEND_SIGINT 0x0002 +#define PEND_SIGTERM 0x0004 +#define PEND_SIGUSR1 0x0008 + +#define ENTER_CRITICAL() InCriticalSection++ + +#define LEAVE_CRITICAL() \ +do \ +{ \ + if (InCriticalSection > 0) \ + InCriticalSection--; \ +} while (0) + +#define CHECK_CRITICAL(sig) \ +do \ +{ \ + if (InCriticalSection > 0 && (sig) != 0) \ + { \ + pend_signal((sig)); \ + return SIGFUNC_RETURN; \ + } \ +} while (0) + +/* variables */ +extern unsigned int volatile InCriticalSection; /* >0 if in critical section */ +extern int volatile PendingSignal; /* pending signal to resend */ + +/* functions */ +extern void pend_signal __P((int)); + +/* reset signal in case System V semantics */ +#ifdef SYS5SIGNALS +# define FIX_SYSV_SIGNAL(sig, handler) \ +{ \ + if ((sig) != 0) \ + (void) sm_signal((sig), (handler)); \ +} +#else /* SYS5SIGNALS */ +# define FIX_SYSV_SIGNAL(sig, handler) { /* EMPTY */ } +#endif /* SYS5SIGNALS */ + +extern void sm_allsignals __P((bool)); +extern int sm_blocksignal __P((int)); +extern int sm_releasesignal __P((int)); +extern sigfunc_t sm_signal __P((int, sigfunc_t)); +extern SIGFUNC_DECL sm_signal_noop __P((int)); +#endif /* SM_SIGNAL_H */ |