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