ID:               37635
 User updated by:  aeolianmeson at blitzeclipse dot com
 Reported By:      aeolianmeson at blitzeclipse dot com
-Status:           Feedback
+Status:           Open
 Bug Type:         PCNTL related
 Operating System: Fedora 5
 PHP Version:      5.1.4
 New Comment:

Here you go. The signals received were just kills from another term.
Again, this only happens after a number of signals, usually (like
fifteen).

[EMAIL PROTECTED] done]# php testtrap.php
Setting signal handlers ... Done
Generating signal to self...
Got signal 15
in SignalHandler:
array(2) {
  [0]=>
  string(18) "some initial state"
  [1]=>
  int(15)
}
Got signal 15
in SignalHandler:
array(3) {
  [0]=>
  string(18) "some initial state"
  [1]=>
  int(15)
  [2]=>
  int(15)
}
Got signal 15
in SignalHandler:
array(4) {
  [0]=>
  string(18) "some initial state"
  [1]=>
  int(15)
  [2]=>
  int(15)
  [3]=>
  int(15)
}
Main execution, looking at $jm object:
array(4) {
  [0]=>
  string(18) "some initial state"
  [1]=>
  int(15)
  [2]=>
  NULL
  [3]=>
  int(15)
}
*** glibc detected *** php: free(): invalid next size (fast):
0x083eb760 ***
======= Backtrace: =========
/lib/libc.so.6[0x6dcf18]
/lib/libc.so.6(__libc_free+0x79)[0x6e041d]
php(shutdown_memory_manager+0x7c)[0x81b528c]
php(php_request_shutdown+0x3c1)[0x818eb31]
php(main+0x3e2)[0x8241342]
/lib/libc.so.6(__libc_start_main+0xdc)[0x68e7e4]
php[0x80751b1]
======= Memory map: ========
00449000-0045a000 r-xp 00000000 03:02 1509399    /lib/libnsl-2.4.so
0045a000-0045b000 r--p 00010000 03:02 1509399    /lib/libnsl-2.4.so
0045b000-0045c000 rw-p 00011000 03:02 1509399    /lib/libnsl-2.4.so
0045c000-0045e000 rw-p 0045c000 00:00 0
00460000-0046f000 r-xp 00000000 03:02 1509394    /lib/libresolv-2.4.so
0046f000-00470000 r--p 0000e000 03:02 1509394    /lib/libresolv-2.4.so
00470000-00471000 rw-p 0000f000 03:02 1509394    /lib/libresolv-2.4.so
00471000-00473000 rw-p 00471000 00:00 0
00475000-00477000 r-xp 00000000 03:02 1509395   
/lib/libcom_err.so.2.1
00477000-00478000 rw-p 00001000 03:02 1509395   
/lib/libcom_err.so.2.1
0047a000-00492000 r-xp 00000000 03:02 488361    
/usr/lib/libgssapi_krb5.so.2.2
00492000-00493000 rw-p 00017000 03:02 488361    
/usr/lib/libgssapi_krb5.so.2.2
00495000-00498000 r-xp 00000000 03:02 483060    
/usr/lib/libkrb5support.so.0.0
00498000-00499000 rw-p 00002000 03:02 483060    
/usr/lib/libkrb5support.so.0.0
0049b000-005ba000 r-xp 00000000 03:02 1509396   
/lib/libcrypto.so.0.9.8a
005ba000-005cd000 rw-p 0011e000 03:02 1509396   
/lib/libcrypto.so.0.9.8a
005cd000-005d0000 rw-p 005cd000 00:00 0
005d2000-00645000 r-xp 00000000 03:02 488360    
/usr/lib/libkrb5.so.3.2
00645000-00647000 rw-p 00073000 03:02 488360    
/usr/lib/libkrb5.so.3.2
0065c000-00675000 r-xp 00000000 03:02 1509364    /lib/ld-2.4.so
00675000-00676000 r--p 00018000 03:02 1509364    /lib/ld-2.4.so
00676000-00677000 rw-p 00019000 03:02 1509364    /lib/ld-2.4.so
00679000-007a5000 r-xp 00000000 03:02 1509386    /lib/libc-2.4.so
007a5000-007a8000 r--p 0012b000 03:02 1509386    /lib/libc-2.4.so
007a8000-007a9000 rw-p 0012e000 03:02 1509386    /lib/libc-2.4.so
007a9000-007ac000 rw-p 007a9000 00:00 0
007ae000-007d1000 r-xp 00000000 03:02 1509387    /lib/libm-2.4.so
007d1000-007d2000 r--p 00022000 03:02 1509387    /lib/libm-2.4.so
007d2000-007d3000 rw-p 00023000 03:02 1509387    /lib/libm-2.4.so
007d5000-007d7000 r-xp 00000000 03:02 1509388    /lib/libdl-2.4.so
007d7000-007d8000 r--p 00001000 03:02 1509388    /lib/libdl-2.4.so
007d8000-007d9000 rw-p 00002000 03:02 1509388    /lib/libdl-2.4.so
007db000-007ed000 r-xp 00000000 03:02 488328    
/usr/lib/libz.so.1.2.3
007ed000-007ee000 rw-p 00011000 03:02 488328    
/usr/lib/libz.so.1.2.3
007f0000-007f1000 r-xp 00000000 03:02 486046    
/usr/lib/libpspell.so.15.1.3
007f1000-007f2000 rw-p 00000000 03:02 486046    
/usr/lib/libpspell.so.15.1.3
00828000-0085f000 r-xp 00000000 03:02 465226    
/usr/lib/libcurl.so.3.0.0
0085f000-00860000 rw-p 00037000 03:02 465226    
/usr/lib/libcurl.so.3.0.0
00862000-00924000 r-xp 00000000 03:02 482884    
/usr/lib/libaspell.so.15.1.3
00924000-00929000 rw-p 000c1000 03:02 482884    
/usr/lib/libaspell.so.15.1.3
00929000-0092d000 rw-p 00929000 00:00 0
009a1000-009b1000 r-xp 00000000 03:02 1509390   
/lib/libpthread-2.4.so
009b1000-009b2000 r--p 0000f000 03:02 1509390   
/lib/libpthread-2.4.so
009b2000-009b3000 rw-p 00010000 03:02 1509390   
/lib/libpthread-2.4.so
009b3000-009b5000 rw-p 009b3000 00:00 0
00c25000-00c54000 r-xp 00000000 03:02 488350    
/usr/lib/libidn.so.11.5.16
00c54000-00c55000 rw-p 0002f000 03:02 488350    
/usr/lib/libidn.so.11.5.16
00c57000-00d4b000 r-xp 00000000 03:02 1500135    /lib/libdb-4.3.so
00d4b000-00d4e000 rw-p 000f4000 03:02 1500135    /lib/libdb-4.3.so
06c4c000-06c70000 r-xp 00000000 03:02 488359    
/usr/lib/libk5crypto.so.3.0
06c70000-06c71000 rw-p 00024000 03:02 488359    
/usr/lib/libk5crypto.so.3.0
06c73000-06cb4000 r-xp 00000000 03:02 1509397    /lib/libssl.so.0.9.8a
06cb4000-06cb8000 rw-p 00040000 03:02 1509397    /lib/libssl.so.0.9.8a
06cba000-06cd1000 r-xp 00000000 03:02 484011    
/usr/lib/libsasl2.so.2.0.21
06cd1000-06cd2000 rw-p 00016000 03:0Aborted
[EMAIL PROTECTED] done]#


Previous Comments:
------------------------------------------------------------------------

[2006-05-30 07:59:42] [EMAIL PROTECTED]

>A list of the correct number of elements exists, however 
>the actual values become something else when dumped at program
termination.
I guess var_dump()'s output would worth all these words..

------------------------------------------------------------------------

[2006-05-30 03:16:05] aeolianmeson at blitzeclipse dot com

Description:
------------
There is a problem with the type of the parameter sent to a
signal-handling function.

If everytime the signal-handler adds the signal to an array, all array
keys and values will become corrupted. The total number of array
elements will be correct, but the actual values will sporadically
become arrays, etc...

This happens whereever the signal parameter was used. If the parameter
is typecast to an integer, it works perfectly. This  happens when the
handler is both a function and a method.

Reproduce code:
---------------
<?php
print("pid= " . posix_getpid() . "\n");
declare(ticks=1);
$arrtemp = array();

function handler($nsig)
{
        global $arrtemp;
        $arrtemp[] = $nsig;
        print("Signal caught and registered.\n");
        var_dump($arrtemp);
}

pcntl_signal(SIGTERM, 'handler');
$n = 15;
while($n)
{
        sleep(1);
        $n--;
}
print("terminated.\n\n");
var_dump($arrtemp);
?>

Expected result:
----------------
As the process receives SIGTERMs from the commandline, the handler adds
each signal value to the global array. When the program terminates, the
list is dumped, and should contain a list containing the correct number
of integers depicting the signals that were sent. The keys are normal
indexes.

Actual result:
--------------
A list of the correct number of elements exists, however the actual
values become something else when dumped at program termination.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=37635&edit=1

Reply via email to