1 /* 2 * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. 3 * All rights reserved. 4 * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. 5 * Copyright (c) 1988, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * By using this file, you agree to the terms and conditions set 9 * forth in the LICENSE file which can be found at the top level of 10 * the sendmail distribution. 11 * 12 * $Id: signal.h,v 1.16 2001/07/20 19:48:21 gshapiro Exp $ 13 */ 14 15 #pragma ident "%Z%%M% %I% %E% SMI" 16 17 /* 18 ** SIGNAL.H -- libsm (and sendmail) signal facilities 19 ** Extracted from sendmail/conf.h and focusing 20 ** on signal configuration. 21 */ 22 23 #ifndef SM_SIGNAL_H 24 #define SM_SIGNAL_H 1 25 26 #include <sys/types.h> 27 #include <limits.h> 28 #include <signal.h> 29 #include <sm/cdefs.h> 30 #include <sm/conf.h> 31 32 /* 33 ** Critical signal sections 34 */ 35 36 #define PEND_SIGHUP 0x0001 37 #define PEND_SIGINT 0x0002 38 #define PEND_SIGTERM 0x0004 39 #define PEND_SIGUSR1 0x0008 40 41 #define ENTER_CRITICAL() InCriticalSection++ 42 43 #define LEAVE_CRITICAL() \ 44 do \ 45 { \ 46 if (InCriticalSection > 0) \ 47 InCriticalSection--; \ 48 } while (0) 49 50 #define CHECK_CRITICAL(sig) \ 51 do \ 52 { \ 53 if (InCriticalSection > 0 && (sig) != 0) \ 54 { \ 55 pend_signal((sig)); \ 56 return SIGFUNC_RETURN; \ 57 } \ 58 } while (0) 59 60 /* variables */ 61 extern unsigned int volatile InCriticalSection; /* >0 if in critical section */ 62 extern int volatile PendingSignal; /* pending signal to resend */ 63 64 /* functions */ 65 extern void pend_signal __P((int)); 66 67 /* reset signal in case System V semantics */ 68 #ifdef SYS5SIGNALS 69 # define FIX_SYSV_SIGNAL(sig, handler) \ 70 { \ 71 if ((sig) != 0) \ 72 (void) sm_signal((sig), (handler)); \ 73 } 74 #else /* SYS5SIGNALS */ 75 # define FIX_SYSV_SIGNAL(sig, handler) { /* EMPTY */ } 76 #endif /* SYS5SIGNALS */ 77 78 extern void sm_allsignals __P((bool)); 79 extern int sm_blocksignal __P((int)); 80 extern int sm_releasesignal __P((int)); 81 extern sigfunc_t sm_signal __P((int, sigfunc_t)); 82 extern SIGFUNC_DECL sm_signal_noop __P((int)); 83 #endif /* SM_SIGNAL_H */ 84