signal.h revision 266527
110946SSangeeta.Misra@Sun.COM/*
210946SSangeeta.Misra@Sun.COM * Copyright (c) 1998-2001 Proofpoint, Inc. and its suppliers.
310946SSangeeta.Misra@Sun.COM *	All rights reserved.
410946SSangeeta.Misra@Sun.COM * Copyright (c) 1983, 1995-1997 Eric P. Allman.  All rights reserved.
510946SSangeeta.Misra@Sun.COM * Copyright (c) 1988, 1993
610946SSangeeta.Misra@Sun.COM *	The Regents of the University of California.  All rights reserved.
710946SSangeeta.Misra@Sun.COM *
810946SSangeeta.Misra@Sun.COM * By using this file, you agree to the terms and conditions set
910946SSangeeta.Misra@Sun.COM * forth in the LICENSE file which can be found at the top level of
1010946SSangeeta.Misra@Sun.COM * the sendmail distribution.
1110946SSangeeta.Misra@Sun.COM *
1210946SSangeeta.Misra@Sun.COM *	$Id: signal.h,v 1.17 2013-11-22 20:51:31 ca Exp $
1310946SSangeeta.Misra@Sun.COM */
1410946SSangeeta.Misra@Sun.COM
1510946SSangeeta.Misra@Sun.COM/*
1610946SSangeeta.Misra@Sun.COM**  SIGNAL.H -- libsm (and sendmail) signal facilities
1710946SSangeeta.Misra@Sun.COM**		Extracted from sendmail/conf.h and focusing
1810946SSangeeta.Misra@Sun.COM**		on signal configuration.
1910946SSangeeta.Misra@Sun.COM*/
2010946SSangeeta.Misra@Sun.COM
2110946SSangeeta.Misra@Sun.COM#ifndef SM_SIGNAL_H
2210946SSangeeta.Misra@Sun.COM#define SM_SIGNAL_H 1
2310946SSangeeta.Misra@Sun.COM
2410946SSangeeta.Misra@Sun.COM#include <sys/types.h>
2510946SSangeeta.Misra@Sun.COM#include <limits.h>
2610946SSangeeta.Misra@Sun.COM#include <signal.h>
2710946SSangeeta.Misra@Sun.COM#include <sm/cdefs.h>
2810946SSangeeta.Misra@Sun.COM#include <sm/conf.h>
2910946SSangeeta.Misra@Sun.COM
3010946SSangeeta.Misra@Sun.COM/*
3110946SSangeeta.Misra@Sun.COM**  Critical signal sections
3210946SSangeeta.Misra@Sun.COM*/
3310946SSangeeta.Misra@Sun.COM
3410946SSangeeta.Misra@Sun.COM#define PEND_SIGHUP	0x0001
3510946SSangeeta.Misra@Sun.COM#define PEND_SIGINT	0x0002
3610946SSangeeta.Misra@Sun.COM#define PEND_SIGTERM	0x0004
3710946SSangeeta.Misra@Sun.COM#define PEND_SIGUSR1	0x0008
3810946SSangeeta.Misra@Sun.COM
3910946SSangeeta.Misra@Sun.COM#define ENTER_CRITICAL()	InCriticalSection++
4010946SSangeeta.Misra@Sun.COM
4110946SSangeeta.Misra@Sun.COM#define LEAVE_CRITICAL()						\
4210946SSangeeta.Misra@Sun.COMdo									\
4310946SSangeeta.Misra@Sun.COM{									\
4410946SSangeeta.Misra@Sun.COM	if (InCriticalSection > 0)					\
4510946SSangeeta.Misra@Sun.COM		InCriticalSection--;					\
4610946SSangeeta.Misra@Sun.COM} while (0)
4710946SSangeeta.Misra@Sun.COM
4810946SSangeeta.Misra@Sun.COM#define CHECK_CRITICAL(sig)						\
4910946SSangeeta.Misra@Sun.COMdo									\
5010946SSangeeta.Misra@Sun.COM{									\
5110946SSangeeta.Misra@Sun.COM	if (InCriticalSection > 0 && (sig) != 0)			\
5210946SSangeeta.Misra@Sun.COM	{								\
5310946SSangeeta.Misra@Sun.COM		pend_signal((sig));					\
5410946SSangeeta.Misra@Sun.COM		return SIGFUNC_RETURN;					\
5510946SSangeeta.Misra@Sun.COM	}								\
5610946SSangeeta.Misra@Sun.COM} while (0)
5710946SSangeeta.Misra@Sun.COM
5810946SSangeeta.Misra@Sun.COM/* variables */
5910946SSangeeta.Misra@Sun.COMextern unsigned int	volatile InCriticalSection;	/* >0 if in critical section */
6010946SSangeeta.Misra@Sun.COMextern int		volatile PendingSignal;	/* pending signal to resend */
6110946SSangeeta.Misra@Sun.COM
6210946SSangeeta.Misra@Sun.COM/* functions */
6310946SSangeeta.Misra@Sun.COMextern void		pend_signal __P((int));
6410946SSangeeta.Misra@Sun.COM
6510946SSangeeta.Misra@Sun.COM/* reset signal in case System V semantics */
6610946SSangeeta.Misra@Sun.COM#ifdef SYS5SIGNALS
6710946SSangeeta.Misra@Sun.COM# define FIX_SYSV_SIGNAL(sig, handler)					\
6810946SSangeeta.Misra@Sun.COM{									\
6910946SSangeeta.Misra@Sun.COM	if ((sig) != 0)							\
7010946SSangeeta.Misra@Sun.COM		(void) sm_signal((sig), (handler));			\
7110946SSangeeta.Misra@Sun.COM}
7210946SSangeeta.Misra@Sun.COM#else /* SYS5SIGNALS */
7310946SSangeeta.Misra@Sun.COM# define FIX_SYSV_SIGNAL(sig, handler)	{ /* EMPTY */ }
7410946SSangeeta.Misra@Sun.COM#endif /* SYS5SIGNALS */
7510946SSangeeta.Misra@Sun.COM
7610946SSangeeta.Misra@Sun.COMextern void		sm_allsignals __P((bool));
7710946SSangeeta.Misra@Sun.COMextern int		sm_blocksignal __P((int));
7810946SSangeeta.Misra@Sun.COMextern int		sm_releasesignal __P((int));
7910946SSangeeta.Misra@Sun.COMextern sigfunc_t	sm_signal __P((int, sigfunc_t));
8010946SSangeeta.Misra@Sun.COMextern SIGFUNC_DECL	sm_signal_noop __P((int));
8110946SSangeeta.Misra@Sun.COM#endif /* SM_SIGNAL_H */
8210946SSangeeta.Misra@Sun.COM