@@ -560,11 +560,6 @@ PHP_RSHUTDOWN_FUNCTION(pcntl)
560
560
while (PCNTL_G (head )) {
561
561
sig = PCNTL_G (head );
562
562
PCNTL_G (head ) = sig -> next ;
563
- #ifdef HAVE_STRUCT_SIGINFO_T
564
- if (sig -> siginfo ) {
565
- zend_array_destroy (sig -> siginfo );
566
- }
567
- #endif
568
563
efree (sig );
569
564
}
570
565
while (PCNTL_G (spares )) {
@@ -1379,11 +1374,7 @@ static void pcntl_signal_handler(int signo)
1379
1374
psig -> next = NULL ;
1380
1375
1381
1376
#ifdef HAVE_STRUCT_SIGINFO_T
1382
- zval user_siginfo ;
1383
- array_init (& user_siginfo );
1384
- pcntl_siginfo_to_zval (signo , siginfo , & user_siginfo );
1385
- psig -> siginfo = zend_array_dup (Z_ARRVAL (user_siginfo ));
1386
- zval_ptr_dtor (& user_siginfo );
1377
+ psig -> siginfo = * siginfo ;
1387
1378
#endif
1388
1379
1389
1380
/* the head check is important, as the tick handler cannot atomically clear both
@@ -1428,14 +1419,14 @@ void pcntl_signal_dispatch()
1428
1419
PCNTL_G (head ) = NULL ; /* simple stores are atomic */
1429
1420
1430
1421
/* Allocate */
1431
-
1432
1422
while (queue ) {
1433
1423
if ((handle = zend_hash_index_find (& PCNTL_G (php_signal_table ), queue -> signo )) != NULL ) {
1434
1424
if (Z_TYPE_P (handle ) != IS_LONG ) {
1435
1425
ZVAL_NULL (& retval );
1436
1426
ZVAL_LONG (& params [0 ], queue -> signo );
1437
1427
#ifdef HAVE_STRUCT_SIGINFO_T
1438
- ZVAL_ARR (& params [1 ], queue -> siginfo );
1428
+ array_init (& params [1 ]);
1429
+ pcntl_siginfo_to_zval (queue -> signo , & queue -> siginfo , & params [1 ]);
1439
1430
#else
1440
1431
ZVAL_NULL (& params [1 ]);
1441
1432
#endif
0 commit comments