123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #ifndef ZEND_SIGNAL_H
- #define ZEND_SIGNAL_H
- #ifdef ZEND_SIGNALS
- #include <signal.h>
- #ifndef NSIG
- #define NSIG 65
- #endif
- #ifndef ZEND_SIGNAL_QUEUE_SIZE
- #define ZEND_SIGNAL_QUEUE_SIZE 64
- #endif
- typedef struct _zend_signal_entry_t {
- int flags;
- void* handler;
- } zend_signal_entry_t;
- typedef struct _zend_signal_t {
- int signo;
- siginfo_t *siginfo;
- void* context;
- } zend_signal_t;
- typedef struct _zend_signal_queue_t {
- zend_signal_t zend_signal;
- struct _zend_signal_queue_t *next;
- } zend_signal_queue_t;
- typedef struct _zend_signal_globals_t {
- int depth;
- int blocked;
- int running;
- int active;
- bool check;
- bool reset;
- zend_signal_entry_t handlers[NSIG];
- zend_signal_queue_t pstorage[ZEND_SIGNAL_QUEUE_SIZE], *phead, *ptail, *pavail;
- } zend_signal_globals_t;
- # ifdef ZTS
- # define SIGG(v) ZEND_TSRMG_FAST(zend_signal_globals_offset, zend_signal_globals_t *, v)
- BEGIN_EXTERN_C()
- ZEND_API extern int zend_signal_globals_id;
- ZEND_API extern size_t zend_signal_globals_offset;
- END_EXTERN_C()
- # else
- # define SIGG(v) (zend_signal_globals.v)
- BEGIN_EXTERN_C()
- ZEND_API extern zend_signal_globals_t zend_signal_globals;
- END_EXTERN_C()
- # endif
- # ifdef ZTS
- # define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id)) { SIGG(depth)++; }
- # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id) && UNEXPECTED(((SIGG(depth)--) == SIGG(blocked)))) { zend_signal_handler_unblock(); }
- # else
- # define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() SIGG(depth)++;
- # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (((SIGG(depth)--) == SIGG(blocked))) { zend_signal_handler_unblock(); }
- # endif
- ZEND_API void zend_signal_handler_unblock(void);
- void zend_signal_activate(void);
- void zend_signal_deactivate(void);
- BEGIN_EXTERN_C()
- ZEND_API void zend_signal_startup(void);
- END_EXTERN_C()
- void zend_signal_init(void);
- ZEND_API void zend_signal(int signo, void (*handler)(int));
- ZEND_API void zend_sigaction(int signo, const struct sigaction *act, struct sigaction *oldact);
- #else
- # define ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
- # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()
- # define zend_signal_activate()
- # define zend_signal_deactivate()
- # define zend_signal_startup()
- # define zend_signal_init()
- # define zend_signal(signo, handler) signal(signo, handler)
- # define zend_sigaction(signo, act, oldact) sigaction(signo, act, oldact)
- #endif
- #endif
|