Bug #18258: Gettting frequent Seg Faults on PHP scripts
| From: | tauren at servlets dot net | Date: | Wed, 10 Jul 2002 07:54:06 +0000 |
| Subject: | Bug #18258: Gettting frequent Seg Faults on PHP scripts | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-13693@lists.php.net to get a copy of this message | ||
From: tauren@servlets.net
Operating system: Red Hat 6.2
PHP version: 4.2.1
PHP Bug Type: Reproducible crash
Bug description: Gettting frequent Seg Faults on PHP scripts
I just upgraded to Apache 1.3.26 with PHP 4.2.1 and now I'm having problems
with Segmentaion Faults when going to PHP pages. Previous to upgrading,
my Apache/PHP server was running with all of the same options that I'm
compiling in now. I wasn't having problems with the Apache
1.3.24/PHP4.2.0 combination.
For instance, I have a simple document called phpinfo.php that contains
the following:
<?php
phpinfo();
?>
When I hit this page, I will normally get the text output, but sometimes
my browser will come back with no data or an error. Most of the time the
two images (PHP and Zend) will not display. When this happens, the
following errors are appended to the error_log:
[Wed Jul 10 00:38:43 2002] [notice] child pid 1295 exit signal
Segmentation fault (11)
[Wed Jul 10 00:38:46 2002] [notice] child pid 1298 exit signal
Segmentation fault (11)
I've recompiled Apache and PHP with the --enable-debug option. Here is
how PHP is configured:
CPPFLAGS=-I/usr/local/include
LDFLAGS=-L/usr/local/lib
./configure --prefix=/usr/local \
--with-apache=/home/local/src/atb/Apachetoolbox-1.5.58/apache_1.3.26 \
--enable-exif \
--enable-track-vars \
--with-calendar=shared \
--enable-magic-quotes \
--enable-trans-sid \
--enable-wddx \
--enable-ftp \
--enable-inline-optimization \
--enable-memory-limit \
--enable-debug \
--with-gd="/usr/local" \
--with-zlib \
--enable-gd-native-tt \
--with-t1lib="/usr/local" \
--with-jpeg-dir="/usr" \
--with-png-dir="/usr" \
--with-zlib-dir="/usr" \
--with-ttf \
--with-freetype-dir="/usr/local" \
--with-imap=/usr/local \
--with-mhash=/usr/local \
--with-mcrypt=/usr/local \
--with-openssl="/usr/local" \
--with-curl=/usr/local \
--with-gettext="/usr" \
--with-mysql=/usr \
--with-ldap \
Here is how Apache is configured:
export SSL_BASE=/usr/local
export EAPI_MM=/home/local/src/atb/Apachetoolbox-1.5.58/src/mm-1.1.3
export CFLAGS=""
export LIBS=""
export INCLUDES=""
./configure --prefix=/usr/local/apache \
--enable-suexec \
--suexec-caller=nobody \
--suexec-docroot=/home \
--suexec-logfile=/var/log/httpd/cgi.log \
--suexec-uidmin=500 \
--suexec-gidmin=500 \
--suexec-safepath=/usr/local/bin:/usr/bin:/bin \
--enable-module=so \
--enable-module=access \
--disable-module=auth_db \
--disable-module=digest \
--enable-module=imap \
--enable-module=mime \
--enable-module=setenvif \
--enable-module=usertrack \
--enable-module=auth \
--disable-module=cern_meta \
--disable-module=expires \
--enable-module=log_config \
--disable-module=proxy \
--disable-module=vhost_alias \
--disable-module=auth_anon \
--enable-module=cgi \
--enable-module=headers \
--disable-module=log_referer \
--enable-module=rewrite \
--enable-module=userdir \
--enable-module=asis \
--enable-module=autoindex \
--disable-module=example \
--disable-module=log_agent \
--enable-module=negotiation \
--enable-module=status \
--enable-module=actions \
--disable-module=auth_dbm \
--enable-module=dir \
--enable-module=include \
--disable-module=mime_magic \
--disable-module=unique_id \
--enable-module=alias \
--disable-module=auth_digest \
--enable-module=env \
--disable-module=info \
--disable-module=mmap_static \
--disable-module=speling \
--enable-module=ssl \
--activate-module=src/modules/layout/liblayout.a \
--activate-module=src/modules/ldap/mod_auth_ldap.c \
--activate-module=src/modules/perl/libperl.a \
--add-module=mod_frontpage.c --activate-module=src/modules/dav/libdav.a
\
--add-module=/home/local/src/atb/Apachetoolbox-1.5.58/src/mod_gzip.c \
--activate-module=src/modules/php4/libphp4.a \
Note again that my previous Apache/PHP installation was successfully using
all of these options.
I'm not that familiar with using gdb, so I'll explain exactly what I did.
Using this debug version of Apache/PHP, I executed this command:
gdb /usr/local/apache/bin/httpd
At the (gdb) prompt, I entered this (my Apache configuration doesn't use
the default httpd.conf location):
(gdb) run -X -DSSL -f /usr/local/apache/conf/custom/test/httpd.conf
Starting program: /usr/local/apache/bin/httpd -X -DSSL -f
/usr/local/apache/conf/custom/test/httpd.conf
Processing config directory: /usr/local/apache/conf/custom/test/virtual
Processing config file:
/usr/local/apache/conf/custom/test/virtual/www.sample.com:80
When I hit the phpinfo.php page, this was output in gdb:
Program received signal SIGSEGV, Segmentation fault.
0x81b42a6 in _zend_is_inconsistent (ht=0x63616373, file=0x8364c24
"zend_hash.c", line=681)
at zend_hash.c:84
84 if (ht->inconsistent==HT_OK) {
I did a backtrace and got this:
(gdb) bt
#0 0x81b42a6 in _zend_is_inconsistent (ht=0x63616373, file=0x8364c24
"zend_hash.c", line=681)
at zend_hash.c:84
#1 0x81b5e26 in zend_hash_apply (ht=0x63616373,
apply_func=0x80c5f78 <php_apache_alter_ini_entries>) at
zend_hash.c:681
#2 0x80c6130 in send_php () at md4.c:255
#3 0x80c636f in send_parsed_php () at md4.c:255
#4 0x821bd83 in ap_invoke_handler () at md4.c:255
#5 0x8230b59 in process_request_internal () at md4.c:255
#6 0x8230bbc in ap_process_request () at md4.c:255
#7 0x8227c1e in child_main () at md4.c:255
#8 0x8227dd0 in make_child () at md4.c:255
#9 0x8227f29 in startup_children () at md4.c:255
#10 0x8228586 in standalone_main () at md4.c:255
#11 0x8228d63 in main () at md4.c:255
#12 0x402e59cb in __libc_start_main (main=0x82289fc <main>, argc=5,
argv=0xbffffb44,
init=0x808f990 <_init>, fini=0x832864c <_fini>, rtld_fini=0x4000aea0
<_dl_fini>,
stack_end=0xbffffb3c) at ../sysdeps/generic/libc-start.c:92
I don't know if this is helpful or not. If you need more details, please
let me know what you need and how to get it.
This problem seems to be happening only on any PHP page. No other
document types are causing the problem.
Normally I would also include APC (alternative cache) and/or Zend
Optimizer, but I've left them out for now.
Currently my PHP customers on this server are without reliable PHP
service. Any help or suggestions would be very much appreciated!
Thanks,
Tauren
--
Edit bug report at http://bugs.php.net/?id=18258&edit=1
--
Fixed in CVS: http://bugs.php.net/fix.php?id=18258&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=18258&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=18258&r=needtrace
Try newer version: http://bugs.php.net/fix.php?id=18258&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=18258&r=support
Expected behavior: http://bugs.php.net/fix.php?id=18258&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=18258&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=18258&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=18258&r=globals