#29330 [Fbk->Opn]: pcntl_tick_handler crashes
| From: | grayw at mail dot montclair dot edu | Date: | Tue, 03 Aug 2004 18:38:34 +0000 |
| Subject: | #29330 [Fbk->Opn]: pcntl_tick_handler crashes | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-64038@lists.php.net to get a copy of this message | ||
ID: 29330
User updated by: grayw at mail dot montclair dot edu
Reported By: grayw at mail dot montclair dot edu
-Status: Feedback
+Status: Open
Bug Type: Reproducible crash
Operating System: Mac OS X 10.3.4
PHP Version: 5.0.0
New Comment:
As this was a PHP-CLI program, and I did not build the apache module
for PHP5 (I use php4 for my webserver), I rebuilt PHP5 with the apache
module and configured my web server to use it instead of 4. (There has
to be a better way! Damn apple and the missing coredumps ;-)
Then I spent a lot of time trying to convert fputs into prints, etc.
Apparantly, pcntl_fork() isn't recognized by the php5_module, just the
PHP CLI. Which makes sense. This program forks twice to detach from
the terminal and run as a daemon. So, I don't think we can really get
this program to work using httpd -X from gdb. Is there another way I
can get a core dump? Or does someone in the PHP group know how to turn
them on in Mac OS X?
Are you able to get any useful information from the Mac OS X crashlog
below? It does provide a stack trace.
Previous Comments:
------------------------------------------------------------------------
[2004-08-03 09:15:28] derick@php.net
Please read that page carefully, it also says what to do if you're not
getting core-dumps.
------------------------------------------------------------------------
[2004-08-02 23:38:05] grayw at mail dot montclair dot edu
Still trying to determine how to get a core file in Mac OS X Panther.
According to the manpage, cores should dump to /cores provided that
/etc/hostconfig has COREDUMPS=-YES- and the invoking user can write to
cores. This, however, is not working.
------------------------------------------------------------------------
[2004-08-02 11:07:01] derick@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a backtrace to see what is happening behind the scenes. To
find out how to generate a backtrace, please read
http://bugs.php.net/bugs-generating-backtrace.php
Once you have generated a backtrace, please submit it to this bug
report and change the status back to "Open". Thank you for helping
us make PHP better.
------------------------------------------------------------------------
[2004-07-22 16:18:12] grayw at mail dot montclair dot edu
Description:
------------
A daemon (using PHPCLI) that spawns children using pcntl_fork crashes
reproducibly.
Crashlog suggests pcntl_tick_handler is the culprit, however it could
be my doing. Crashlog output below. Crash sometimes occurs right
away, but never later than 3 minutes after starting daemon.
Other info:
configure:
./configure \
--prefix=/usr/local/php5 \
--disable-cgi \
--with-openssl=/usr/local/ssl \
--enable-calendar \
--with-libxml-dir=/usr/local \
--with-gd \
--with-jpeg-dir=/usr/local \
--with-png-dir=/usr/local \
--with-zlib-dir=/usr \
--enable-ftp \
--with-ldap \
--with-mcrypt \
--with-mhash \
--with-mysql=/usr/local/mysql \
--with-ncurses \
--with-pgsql=/usr/local/postgres \
--enable-soap \
--enable-sockets \
--with-pear \
--enable-pcntl
Changes to php.ini from ini-dist:
;include_path = ".:/php/includes"
include_path =
".:/usr/local/php5/include/php:/usr/local/php5/lib/php:./includes"
Reproduce code:
---------------
Providing link to the full source, as the source is somewhat complex:
http://quicksilver.montclair.edu/src/ServiceMonitor/
The crash is happening during the loop() method of ServiceCheckRunner:
public function loop()
{
declare(ticks=1);
pcntl_signal(SIGCHLD, array($this, "sig_child"));
pcntl_signal(SIGUSR1, array($this, "sig_usr1"));
pcntl_signal(SIGINT, array($this, "sig_int"));
pcntl_signal(SIGHUP, array($this, "sig_hup"));
pcntl_signal(SIGTERM, array($this, "sig_term"));
//while (1) {}
//begin, The Big Loop.
while(1)
{
$now = time();
if (count($this->children) < $this->num_children)
{
$service = $this->next();
if ($now < $service->next_attempt())
{
sleep(1);
continue;
}
$service->set_next_attempt();
if ($pid = pcntl_fork())
{
$this->children[$pid] = $service;
}
else {
pcntl_alarm($service->timeout());
exit($service->run());
}
}
} // end, The Big Loop.
} // end function loop
Expected result:
----------------
The processes should continue running until a signal is received and
handled, or they receive a SIGKILL.
Actual result:
--------------
Daemon crashes every time it is run, with a malloc message and a core
dump (which the kernel catches, and formats using CrashReporter).
Console output:
*** malloc[19317]: error for object 0xcbc4d0: Incorrect checksum for
freed object - object was probably modified after being freed; break at
szone_error
Output from Apple's CrashReporter:
**********
Host Name: quicksilver.montclair.edu
Date/Time: 2004-07-22 09:44:07 -0400
OS Version: 10.3.4 (Build 7H63)
Report Version: 2
Command: php
Path: /usr/local/php5/bin/php
Version: ??? (???)
PID: 19660
Thread: 0
Exception: EXC_BAD_ACCESS (0x0001)
Codes: KERN_INVALID_ADDRESS (0x0001) at 0x784816ff
Thread 0 Crashed:
0 php 0x001bb470 pcntl_tick_handler + 0x9c (pcntl.c:668)
1 php 0x001804b8 zend_llist_apply_with_argument + 0x38
(zend_llist.c:233)
2 php 0x0015bb78 php_run_ticks + 0x38 (php_ticks.c:71)
3 php 0x001ae654 zend_ticks_handler + 0x64 (zend_execute.c:4187)
4 php 0x001a7364 execute + 0x14c (zend_execute.c:1391)
5 php 0x001aa90c zend_do_fcall_common_helper + 0x350
(zend_execute.c:2729)
6 php 0x001a7364 execute + 0x14c (zend_execute.c:1391)
7 php 0x0018952c zend_execute_scripts + 0xfc (zend.c:1062)
8 php 0x00152148 php_execute_script + 0x270 (main.c:1629)
9 php 0x001bca70 main + 0xb98 (php_cli.c:944)
10 php 0x00002380 _start + 0x188 (crt.c:267)
11 php 0x000021f4 start + 0x30
PPC Thread State:
srr0: 0x001bb470 srr1: 0x0000f030 vrsave: 0x00000000
cr: 0x88022224 xer: 0x00000002 lr: 0x001bb478 ctr: 0x0017d7b0
r0: 0x001bb4b4 r1: 0xbfffea50 r2: 0x00000000 r3: 0x00279720
r4: 0x104816f7 r5: 0xbfffea90 r6: 0x00cb08e0 r7: 0x00000004
r8: 0x02045210 r9: 0x00ca2d60 r10: 0x00276250 r11: 0x00276254
r12: 0x0017d7b0 r13: 0x00275000 r14: 0x00000000 r15: 0x00278e90
r16: 0x00000008 r17: 0x00259440 r18: 0x002761b8 r19: 0x00000000
r20: 0x00000000 r21: 0x00ca33d0 r22: 0x00000001 r23: 0x002749f0
r24: 0x0025a5d4 r25: 0x00000000 r26: 0x00cbce30 r27: 0x0025b3dc
r28: 0x00274920 r29: 0x00000001 r30: 0x784816f7 r31: 0x001bb3dc
Binary Images Description:
0x1000 - 0x228fff php php
0x890000 - 0x8aafff libmysqlclient.12.dylib
/usr/local/mysql/lib/mysql/libmysqlclient.12.dylib
0x8b9000 - 0x8d3fff libjpeg.62.dylib
/usr/local/lib/libjpeg.62.dylib
0xa6d000 - 0xa93fff libmhash.2.dylib
/usr/local/lib/libmhash.2.dylib
0xad5000 - 0xaf5fff libmcrypt.4.dylib
/usr/local/lib/libmcrypt.4.dylib
0x1808000 - 0x18d0fff libxml2.2.dylib
/usr/local/lib/libxml2.2.dylib
0x76080000 - 0x76085fff libltdl.3.dylib /usr/lib/libltdl.3.dylib
0x81b90000 - 0x81b92fff libpanel.5.dylib /usr/lib/libpanel.5.dylib
0x8fe00000 - 0x8fe4ffff dyld /usr/lib/dyld
0x90000000 - 0x90122fff libSystem.B.dylib /usr/lib/libSystem.B.dylib
0x939d0000 - 0x939d4fff libmathCommon.A.dylib
/usr/lib/system/libmathCommon.A.dylib
0x94000000 - 0x9403cfff com.apple.LDAPFramework 1.3
(37) /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP
0x94120000 - 0x9414bfff libncurses.5.dylib
/usr/lib/libncurses.5.dylib
0x94500000 - 0x9450ffff libsasl2.2.0.1.dylib
/usr/lib/libsasl2.2.0.1.dylib
0x945b0000 - 0x945b9fff libz.1.dylib /usr/lib/libz.1.dylib
0x94610000 - 0x9462afff libresolv.9.dylib /usr/lib/libresolv.9.dylib
0x96a20000 - 0x96ae2fff libcrypto.0.9.7.dylib
/usr/lib/libcrypto.0.9.7.dylib
0x96b40000 - 0x96b6efff libssl.0.9.7.dylib
/usr/lib/libssl.0.9.7.dylib
0x96cb0000 - 0x96d9efff libiconv.2.dylib /usr/lib/libiconv.2.dylib
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=29330&edit=1