@@ -75,12 +75,12 @@ void zend_signal_handler_defer(int signo, siginfo_t *siginfo, void *context)
75
75
int errno_save = errno ;
76
76
zend_signal_queue_t * queue , * qtmp ;
77
77
78
- if (SIGG (active )) {
79
- if (SIGG (depth ) == 0 ) { /* try to handle signal */
80
- if (SIGG (blocked ) != -1 ) { /* inverse */
81
- SIGG (blocked ) = -1 ; /* signal is not blocked */
78
+ if (EXPECTED ( SIGG (active ) )) {
79
+ if (UNEXPECTED ( SIGG (depth ) == 0 ) ) { /* try to handle signal */
80
+ if (UNEXPECTED ( SIGG (blocked ))) {
81
+ SIGG (blocked ) = 0 ;
82
82
}
83
- if (SIGG (running ) == 0 ) {
83
+ if (EXPECTED ( SIGG (running ) == 0 ) ) {
84
84
SIGG (running ) = 1 ;
85
85
zend_signal_handler (signo , siginfo , context );
86
86
@@ -98,7 +98,7 @@ void zend_signal_handler_defer(int signo, siginfo_t *siginfo, void *context)
98
98
SIGG (running ) = 0 ;
99
99
}
100
100
} else { /* delay signal handling */
101
- SIGG (blocked ) = 0 ; /* signal is blocked */
101
+ SIGG (blocked ) = 1 ; /* signal is blocked */
102
102
103
103
if ((queue = SIGG (pavail ))) { /* if none available it's simply forgotton */
104
104
SIGG (pavail ) = queue -> next ;
@@ -135,7 +135,7 @@ ZEND_API void zend_signal_handler_unblock(void)
135
135
zend_signal_queue_t * queue ;
136
136
zend_signal_t zend_signal ;
137
137
138
- if (SIGG (active )) {
138
+ if (EXPECTED ( SIGG (active ) )) {
139
139
SIGNAL_BEGIN_CRITICAL (); /* procmask to protect handler_defer as if it were called by the kernel */
140
140
queue = SIGG (phead );
141
141
SIGG (phead ) = queue -> next ;
@@ -282,7 +282,7 @@ void zend_signal_activate(void)
282
282
283
283
memcpy (& SIGG (handlers ), & global_orig_handlers , sizeof (global_orig_handlers ));
284
284
285
- for (x = 0 ; x < sizeof (zend_sigs ) / sizeof (* zend_sigs ); x ++ ) {
285
+ for (x = 0 ; x < sizeof (zend_sigs ) / sizeof (* zend_sigs ); x ++ ) {
286
286
zend_signal_register (zend_sigs [x ], zend_signal_handler_defer );
287
287
}
288
288
@@ -294,15 +294,15 @@ void zend_signal_activate(void)
294
294
* */
295
295
void zend_signal_deactivate (void )
296
296
{
297
- int x ;
298
- struct sigaction sa = {{0 }};
299
297
300
298
if (SIGG (check )) {
299
+ int x ;
300
+ struct sigaction sa = {{0 }};
301
301
if (SIGG (depth ) != 0 ) {
302
302
zend_error (E_CORE_WARNING , "zend_signal: shutdown with non-zero blocking depth (%d)" , SIGG (depth ));
303
303
}
304
304
/* did anyone steal our installed handler */
305
- for (x = 0 ; x < sizeof (zend_sigs ) / sizeof (* zend_sigs ); x ++ ) {
305
+ for (x = 0 ; x < sizeof (zend_sigs ) / sizeof (* zend_sigs ); x ++ ) {
306
306
sigaction (zend_sigs [x ], NULL , & sa );
307
307
if (sa .sa_sigaction != zend_signal_handler_defer ) {
308
308
zend_error (E_CORE_WARNING , "zend_signal: handler was replaced for signal (%d) after startup" , zend_sigs [x ]);
@@ -313,18 +313,17 @@ void zend_signal_deactivate(void)
313
313
SIGNAL_BEGIN_CRITICAL ();
314
314
SIGG (active ) = 0 ;
315
315
SIGG (running ) = 0 ;
316
- SIGG (blocked ) = -1 ;
316
+ SIGG (blocked ) = 0 ;
317
317
SIGG (depth ) = 0 ;
318
318
SIGNAL_END_CRITICAL ();
319
319
}
320
320
/* }}} */
321
321
322
- static void zend_signal_globals_ctor (zend_signal_globals_t * zend_signal_globals )
322
+ static void zend_signal_globals_ctor (zend_signal_globals_t * zend_signal_globals ) /* {{{ */
323
323
{
324
324
size_t x ;
325
325
326
326
memset (zend_signal_globals , 0 , sizeof (* zend_signal_globals ));
327
- zend_signal_globals -> blocked = -1 ;
328
327
329
328
for (x = 0 ; x < sizeof (zend_signal_globals -> pstorage ) / sizeof (* zend_signal_globals -> pstorage ); ++ x ) {
330
329
zend_signal_queue_t * queue = & zend_signal_globals -> pstorage [x ];
@@ -333,21 +332,35 @@ static void zend_signal_globals_ctor(zend_signal_globals_t *zend_signal_globals)
333
332
zend_signal_globals -> pavail = queue ;
334
333
}
335
334
}
335
+ /* }}} */
336
336
337
- static void zend_signal_globals_dtor ( zend_signal_globals_t * zend_signal_globals )
337
+ void zend_signal_init () /* {{{ */
338
338
{
339
- zend_signal_globals -> blocked = -1 ;
339
+ int signo ;
340
+ struct sigaction sa = {{0 }};
341
+
342
+ /* Save previously registered signal handlers into orig_handlers */
343
+ memset (& global_orig_handlers , 0 , sizeof (global_orig_handlers ));
344
+ for (signo = 1 ; signo < NSIG ; ++ signo ) {
345
+ if (sigaction (signo , NULL , & sa ) == 0 ) {
346
+ global_orig_handlers [signo - 1 ].flags = sa .sa_flags ;
347
+ if (sa .sa_flags & SA_SIGINFO ) {
348
+ global_orig_handlers [signo - 1 ].handler = (void * ) sa .sa_sigaction ;
349
+ } else {
350
+ global_orig_handlers [signo - 1 ].handler = (void * ) sa .sa_handler ;
351
+ }
352
+ }
353
+ }
340
354
}
355
+ /* }}} */
341
356
342
357
/* {{{ zend_signal_startup
343
358
* alloc zend signal globals */
344
359
void zend_signal_startup ()
345
360
{
346
- int signo ;
347
- struct sigaction sa = {{0 }};
348
361
349
362
#ifdef ZTS
350
- ts_allocate_id (& zend_signal_globals_id , sizeof (zend_signal_globals_t ), (ts_allocate_ctor ) zend_signal_globals_ctor , ( ts_allocate_dtor ) zend_signal_globals_dtor );
363
+ ts_allocate_id (& zend_signal_globals_id , sizeof (zend_signal_globals_t ), (ts_allocate_ctor ) zend_signal_globals_ctor , NULL );
351
364
#else
352
365
zend_signal_globals_ctor (& zend_signal_globals );
353
366
#endif
@@ -374,28 +387,7 @@ void zend_signal_startup()
374
387
sigdelset (& global_sigmask , SIGTRAP );
375
388
#endif
376
389
377
- /* Save previously registered signal handlers into orig_handlers */
378
- memset (& global_orig_handlers , 0 , sizeof (global_orig_handlers ));
379
- for (signo = 1 ; signo < NSIG ; ++ signo ) {
380
- if (sigaction (signo , NULL , & sa ) == 0 ) {
381
- global_orig_handlers [signo - 1 ].flags = sa .sa_flags ;
382
- if (sa .sa_flags & SA_SIGINFO ) {
383
- global_orig_handlers [signo - 1 ].handler = (void * ) sa .sa_sigaction ;
384
- } else {
385
- global_orig_handlers [signo - 1 ].handler = (void * ) sa .sa_handler ;
386
- }
387
- }
388
- }
389
- }
390
- /* }}} */
391
-
392
- /* {{{ zend_signal_shutdown
393
- * called by zend_shutdown */
394
- void zend_signal_shutdown (void )
395
- {
396
- #ifndef ZTS
397
- zend_signal_globals_dtor (& zend_signal_globals );
398
- #endif
390
+ zend_signal_init ();
399
391
}
400
392
/* }}} */
401
393
0 commit comments