xref: /freebsd/contrib/sendmail/include/sm/signal.h (revision ee7b0571c2c18bdec848ed2044223cc88db29bd8)
140266059SGregory Neil Shapiro /*
25dd76dd0SGregory Neil Shapiro  * Copyright (c) 1998-2001 Proofpoint, Inc. and its suppliers.
340266059SGregory Neil Shapiro  *	All rights reserved.
440266059SGregory Neil Shapiro  * Copyright (c) 1983, 1995-1997 Eric P. Allman.  All rights reserved.
540266059SGregory Neil Shapiro  * Copyright (c) 1988, 1993
640266059SGregory Neil Shapiro  *	The Regents of the University of California.  All rights reserved.
740266059SGregory Neil Shapiro  *
840266059SGregory Neil Shapiro  * By using this file, you agree to the terms and conditions set
940266059SGregory Neil Shapiro  * forth in the LICENSE file which can be found at the top level of
1040266059SGregory Neil Shapiro  * the sendmail distribution.
1140266059SGregory Neil Shapiro  *
12*4313cc83SGregory Neil Shapiro  *	$Id: signal.h,v 1.17 2013-11-22 20:51:31 ca Exp $
1340266059SGregory Neil Shapiro  */
1440266059SGregory Neil Shapiro 
1540266059SGregory Neil Shapiro /*
1640266059SGregory Neil Shapiro **  SIGNAL.H -- libsm (and sendmail) signal facilities
1740266059SGregory Neil Shapiro **		Extracted from sendmail/conf.h and focusing
1840266059SGregory Neil Shapiro **		on signal configuration.
1940266059SGregory Neil Shapiro */
2040266059SGregory Neil Shapiro 
2140266059SGregory Neil Shapiro #ifndef SM_SIGNAL_H
2240266059SGregory Neil Shapiro #define SM_SIGNAL_H 1
2340266059SGregory Neil Shapiro 
2440266059SGregory Neil Shapiro #include <sys/types.h>
2540266059SGregory Neil Shapiro #include <limits.h>
2640266059SGregory Neil Shapiro #include <signal.h>
2740266059SGregory Neil Shapiro #include <sm/cdefs.h>
2840266059SGregory Neil Shapiro #include <sm/conf.h>
2940266059SGregory Neil Shapiro 
3040266059SGregory Neil Shapiro /*
3140266059SGregory Neil Shapiro **  Critical signal sections
3240266059SGregory Neil Shapiro */
3340266059SGregory Neil Shapiro 
3440266059SGregory Neil Shapiro #define PEND_SIGHUP	0x0001
3540266059SGregory Neil Shapiro #define PEND_SIGINT	0x0002
3640266059SGregory Neil Shapiro #define PEND_SIGTERM	0x0004
3740266059SGregory Neil Shapiro #define PEND_SIGUSR1	0x0008
3840266059SGregory Neil Shapiro 
3940266059SGregory Neil Shapiro #define ENTER_CRITICAL()	InCriticalSection++
4040266059SGregory Neil Shapiro 
4140266059SGregory Neil Shapiro #define LEAVE_CRITICAL()						\
4240266059SGregory Neil Shapiro do									\
4340266059SGregory Neil Shapiro {									\
4440266059SGregory Neil Shapiro 	if (InCriticalSection > 0)					\
4540266059SGregory Neil Shapiro 		InCriticalSection--;					\
4640266059SGregory Neil Shapiro } while (0)
4740266059SGregory Neil Shapiro 
4840266059SGregory Neil Shapiro #define CHECK_CRITICAL(sig)						\
4940266059SGregory Neil Shapiro do									\
5040266059SGregory Neil Shapiro {									\
5140266059SGregory Neil Shapiro 	if (InCriticalSection > 0 && (sig) != 0)			\
5240266059SGregory Neil Shapiro 	{								\
5340266059SGregory Neil Shapiro 		pend_signal((sig));					\
5440266059SGregory Neil Shapiro 		return SIGFUNC_RETURN;					\
5540266059SGregory Neil Shapiro 	}								\
5640266059SGregory Neil Shapiro } while (0)
5740266059SGregory Neil Shapiro 
5840266059SGregory Neil Shapiro /* variables */
5940266059SGregory Neil Shapiro extern unsigned int	volatile InCriticalSection;	/* >0 if in critical section */
6040266059SGregory Neil Shapiro extern int		volatile PendingSignal;	/* pending signal to resend */
6140266059SGregory Neil Shapiro 
6240266059SGregory Neil Shapiro /* functions */
6340266059SGregory Neil Shapiro extern void		pend_signal __P((int));
6440266059SGregory Neil Shapiro 
6540266059SGregory Neil Shapiro /* reset signal in case System V semantics */
6640266059SGregory Neil Shapiro #ifdef SYS5SIGNALS
6740266059SGregory Neil Shapiro # define FIX_SYSV_SIGNAL(sig, handler)					\
6840266059SGregory Neil Shapiro {									\
6940266059SGregory Neil Shapiro 	if ((sig) != 0)							\
7040266059SGregory Neil Shapiro 		(void) sm_signal((sig), (handler));			\
7140266059SGregory Neil Shapiro }
7240266059SGregory Neil Shapiro #else /* SYS5SIGNALS */
7340266059SGregory Neil Shapiro # define FIX_SYSV_SIGNAL(sig, handler)	{ /* EMPTY */ }
7440266059SGregory Neil Shapiro #endif /* SYS5SIGNALS */
7540266059SGregory Neil Shapiro 
7640266059SGregory Neil Shapiro extern void		sm_allsignals __P((bool));
7740266059SGregory Neil Shapiro extern int		sm_blocksignal __P((int));
7840266059SGregory Neil Shapiro extern int		sm_releasesignal __P((int));
7940266059SGregory Neil Shapiro extern sigfunc_t	sm_signal __P((int, sigfunc_t));
8040266059SGregory Neil Shapiro extern SIGFUNC_DECL	sm_signal_noop __P((int));
8140266059SGregory Neil Shapiro #endif /* SM_SIGNAL_H */
82