php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
zend_signal.h
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Zend Signal Handling |
4 +----------------------------------------------------------------------+
5 | Copyright (c) The PHP Group |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | https://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
15 | Authors: Lucas Nealan <lucas@php.net> |
16 | Arnaud Le Blanc <lbarnaud@php.net> |
17 +----------------------------------------------------------------------+
18
19 */
20
21#ifndef ZEND_SIGNAL_H
22#define ZEND_SIGNAL_H
23
24#ifdef ZEND_SIGNALS
25
26#include <signal.h>
27
28#include "zend_portability.h"
29
30#ifndef NSIG
31#define NSIG 65
32#endif
33
34#ifndef ZEND_SIGNAL_QUEUE_SIZE
35#define ZEND_SIGNAL_QUEUE_SIZE 64
36#endif
37
38/* Signal structs */
39typedef struct _zend_signal_entry_t {
40 int flags; /* sigaction style flags */
41 void* handler; /* signal handler or context */
42} zend_signal_entry_t;
43
44typedef struct _zend_signal_t {
45 int signo;
46 siginfo_t *siginfo;
47 void* context;
48} zend_signal_t;
49
50typedef struct _zend_signal_queue_t {
51 zend_signal_t zend_signal;
52 struct _zend_signal_queue_t *next;
53} zend_signal_queue_t;
54
55/* Signal Globals */
56typedef struct _zend_signal_globals_t {
57 int depth;
58 int blocked; /* 1==TRUE, 0==FALSE */
59 int running; /* in signal handler execution */
60 int active; /* internal signal handling is enabled */
61 bool check; /* check for replaced handlers on shutdown */
62 bool reset; /* reset signal handlers on each request */
63 zend_signal_entry_t handlers[NSIG];
64 zend_signal_queue_t pstorage[ZEND_SIGNAL_QUEUE_SIZE], *phead, *ptail, *pavail; /* pending queue */
65} zend_signal_globals_t;
66
67# ifdef ZTS
68# define SIGG(v) ZEND_TSRMG_FAST(zend_signal_globals_offset, zend_signal_globals_t *, v)
70ZEND_API extern int zend_signal_globals_id;
71ZEND_API extern size_t zend_signal_globals_offset;
73# else
74# define SIGG(v) (zend_signal_globals.v)
76ZEND_API extern zend_signal_globals_t zend_signal_globals;
78# endif /* not ZTS */
79
80# ifdef ZTS
81# define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id)) { SIGG(depth)++; }
82# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id) && UNEXPECTED(((SIGG(depth)--) == SIGG(blocked)))) { zend_signal_handler_unblock(); }
83# else /* ZTS */
84# define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() SIGG(depth)++;
85# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (((SIGG(depth)--) == SIGG(blocked))) { zend_signal_handler_unblock(); }
86# endif /* not ZTS */
87
88ZEND_API void zend_signal_handler_unblock(void);
89void zend_signal_activate(void);
90void zend_signal_deactivate(void);
94void zend_signal_init(void);
95
96ZEND_API void zend_signal(int signo, void (*handler)(int));
97ZEND_API void zend_sigaction(int signo, const struct sigaction *act, struct sigaction *oldact);
98
99#else /* ZEND_SIGNALS */
100
101# define ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
102# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()
103
104# define zend_signal_activate()
105# define zend_signal_deactivate()
106# define zend_signal_startup()
107# define zend_signal_init()
108
109# define zend_signal(signo, handler) signal(signo, handler)
110# define zend_sigaction(signo, act, oldact) sigaction(signo, act, oldact)
111
112#endif /* ZEND_SIGNALS */
113
114#endif /* ZEND_SIGNAL_H */
reset(array|object &$array)
#define next(ls)
Definition minilua.c:2661
#define NSIG
Definition pcntl.c:137
php_output_handler * active
Definition php_output.h:140
php_output_handler * running
Definition php_output.h:141
zend_stack handlers
Definition php_output.h:139
#define ZEND_API
#define END_EXTERN_C()
#define BEGIN_EXTERN_C()
#define zend_signal_activate()
#define zend_signal_deactivate()
#define zend_signal_startup()
#define zend_sigaction(signo, act, oldact)
#define zend_signal_init()
#define zend_signal(signo, handler)
fbc internal_function handler(call, ret)