#23040 [Opn->Fbk]: Periodic Segmentation Faults
| From: | iliaa@php.net | Date: | Tue, 15 Apr 2003 01:35:55 +0000 |
| Subject: | #23040 [Opn->Fbk]: Periodic Segmentation Faults | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-37675@lists.php.net to get a copy of this message | ||
ID: 23040
Updated by: iliaa@php.net
Reported By: tim at danan dot com
-Status: Open
+Status: Feedback
Bug Type: Apache related
Operating System: Redhat 8
PHP Version: 4.3.1
New Comment:
Please try using this CVS snapshot:
http://snaps.php.net/php4-STABLE-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php4-win32-STABLE-latest.zip
I believe that my recent patch for bug #23201 should resolve this bug
as well.
Previous Comments:
------------------------------------------------------------------------
[2003-04-13 10:33:18] tim at danan dot com
I thought of one more piece of information that might be helpful. I'm
not on an Intel chipset. My box is running an Athlon processor, for
what it's worth.
------------------------------------------------------------------------
[2003-04-11 14:45:04] tim at danan dot com
With a little prodding from Philip, here's what I posted on the
FUDForum site, seeking some input after the problem came back in a
different place. It's now definitely reproducable.
=====
I've been struggling with a similar seg fault issue for the past two
weeks. I've been bouncing a bug report around with the PHP team, but we
haven't been able to narrow anything down. This morning I thought I
had fixed the problem after a recompile of Apache and PHP. I went about
15 hours without a seg fault. That all changed once I ran a compact
messages on FudForum.
Previously my seg faults were semi-random. Now I can seg fault PHP on
demand. I've been testing with a hacked up version of the compact page
(adm/compact.php) - I'm slowly adding the code back in until I produce
errors. The seg fault is occuring after the post and appears to be
somewhere around the time of the db_lock (line 110).
Is there anything you can do to help me out? I wasn't able to give the
PHP guys enough detail about a specific function/script (the problem
seemed to be happening on the index page previously) to get a good bug
report for them. This problem is definitely reproducible (every time I
press submit), so if I/we can narrow it down to a function perhaps we
can either (1) find the problem in PHP, or (2) find the problem in
FUDForum.
Config information and backtrace follow:
RedHat 8
Apache 1.3.27
PHP 4.3.2-RC (Friday's CVS, installed per recommendation of PHP team)
FUDForum version is 2.3.9-RC1
MySQL version (from RPM) is mysql-server-3.23.54a-4
Apache and PHP are compiled by me with very few options turned on. PHP
is configured as follows:
./configure \
--with-apxs=/usr/local/apache/bin/apxs \
--with-mysql \
--with-pgsql \
--with-pspell \
--enable-debug
BACKTRACE
Starting program: /usr/local/apache/bin/httpd -X
Program received signal SIGSEGV, Segmentation fault.
0x402520b1 in setvbuf () from /lib/libc.so.6
(gdb) bt
#0 0x402520b1 in setvbuf () from /lib/libc.so.6
#1 0x4053f74a in php_stdiop_set_option (stream=0x84b6624, option=3,
value=2, ptrparam=0xbfff9130)
at /usr/local/src/php4-STABLE-200304041230/main/streams.c:1636
#2 0x4053eaea in _php_stream_set_option (stream=0x84b6624, option=3,
value=2, ptrparam=0xbfff9130)
at /usr/local/src/php4-STABLE-200304041230/main/streams.c:1002
#3 0x404e3e30 in zif_stream_set_write_buffer (ht=2,
return_value=0x84b5e6c, this_ptr=0x0, return_value_used=0)
at /usr/local/src/php4-STABLE-200304041230/ext/standard/file.c:1607
#4 0x405675ea in execute (op_array=0x8430a54)
at /usr/local/src/php4-STABLE-200304041230/Zend/zend_execute.c:1606
#5 0x4055ae19 in zend_execute_scripts (type=8, retval=0x0,
file_count=3)
at /usr/local/src/php4-STABLE-200304041230/Zend/zend.c:864
#6 0x40535de7 in php_execute_script (primary_file=0xbfffebb0)
at /usr/local/src/php4-STABLE-200304041230/main/main.c:1653
#7 0x4056b172 in apache_php_module_main (r=0x840f47c,
display_source_mode=0)
at
/usr/local/src/php4-STABLE-200304041230/sapi/apache/sapi_apache.c:55
#8 0x4056bc05 in send_php (r=0x840f47c, display_source_mode=0,
filename=0x0)
at /usr/local/src/php4-STABLE-200304041230/sapi/apache/mod_php4.c:617
#9 0x4056bd9a in send_parsed_php (r=0x840f47c)
at /usr/local/src/php4-STABLE-200304041230/sapi/apache/mod_php4.c:632
#10 0x080c5c04 in ap_invoke_handler ()
#11 0x080da5aa in process_request_internal ()
#12 0x080da60a in ap_process_request ()
#13 0x080d17f2 in child_main ()
#14 0x080d19b8 in make_child ()
#15 0x080d1b1f in startup_children ()
#16 0x080d214c in standalone_main ()
#17 0x080d2984 in main ()
#18 0x40202907 in __libc_start_main () from /lib/libc.so.6
=====
Here's the code around the function in question. Sorry I can't make it
more clear, but it's within an admin function in someone else's code.:
echo "<br>Please wait while forum is being compacted.<br>This
may take a while depending on the size of your forum.<br>\n";
flush();
define('__file_perms__',
(($GLOBALS['FILE_LOCK']=='Y')?0600:0644));
/* Normal Messages */
echo "Compacting normal messages...<br>\n";
flush();
$stm = time();
db_lock($GLOBALS['DBHOST_TBL_PREFIX'].'msg+,
'.$GLOBALS['DBHOST_TBL_PREFIX'].'thread+,
'.$GLOBALS['DBHOST_TBL_PREFIX'].'forum+,
'.$GLOBALS['DBHOST_TBL_PREFIX'].'replace+');
$files = array();
$r = q("SELECT
".$GLOBALS['DBHOST_TBL_PREFIX']."msg.id,foff,length,file_id,message_threshold
FROM ".$GLOBALS['DBHOST_TBL_PREFIX']."msg
INNER JOIN
".$GLOBALS['DBHOST_TBL_PREFIX']."thread
ON
".$GLOBALS['DBHOST_TBL_PREFIX']."msg.thread_id=".$GLOBALS['DBHOST_TBL_PREFIX']."thread.id
INNER JOIN
".$GLOBALS['DBHOST_TBL_PREFIX']."forum
ON
".$GLOBALS['DBHOST_TBL_PREFIX']."thread.forum_id=".$GLOBALS['DBHOST_TBL_PREFIX']."forum.id
ORDER BY thread_id, id ASC");
$rpl_arr = make_replace_array();
$rvs_rpl_arr = make_reverse_replace_array();
$do_replace = $do_rvs_replace = 0;
if( is_array($rpl_arr) && count($rpl_arr['pattern']) &&
count($rpl_arr['replace']) )
$do_replace = 1;
if( is_array($rvs_rpl_arr) && count($rvs_rpl_arr['pattern']) &&
count($rvs_rpl_arr['replace']) )
$do_rvs_replace = 1;
if( db_count($r) ) {
$ten_percent = round(db_count($r)/10);
$i=0;
while( $obj = db_rowobj($r) ) {
if( empty($files[$obj->file_id]) )
$files[$obj->file_id]=1;
$msg = read_msg_body($obj->foff, $obj->length,
$obj->file_id);
if( $do_rvs_replace ) $msg =
preg_replace($rvs_rpl_arr['pattern'], $rvs_rpl_arr['replace'], $msg);
if( $do_replace ) $msg =
preg_replace($rpl_arr['pattern'], $rpl_arr['replace'], $msg);
$file_id = write_body_c($msg, $len, $off);
if ( $obj->message_threshold &&
$obj->message_threshold < strlen($msg) ) {
$thres_body = trim_html($msg,
$obj->message_threshold);
$file_id_preview =
write_body_c($thres_body, $length_preview, $offset_preview);
}
q("UPDATE ".$GLOBALS['DBHOST_TBL_PREFIX']."msg
SET
foff=".$off.",
length=".$len.",
file_id=".$file_id.",
file_id_preview=".intzero($file_id_preview).",
offset_preview=".intzero($offset_preview).",
length_preview=".intzero($length_preview)."
WHERE id=".$obj->id);
if( $ten_percent && !($i%$ten_percent) && $i )
{
echo ($i/$ten_percent*10)."%
done<br>\n";
flush();
}
$i++;
}
}
else { /* there are no messages in db, make sure that msg files
are blank */
$i=0;
while (++$i<100) {
if(
@file_exists($GLOBALS['MSG_STORE_DIR'].'msg_'.$i) )
@unlink($GLOBALS['MSG_STORE_DIR'].'msg_'.$i);
else
break;
}
}
------------------------------------------------------------------------
[2003-04-11 14:28:02] philip@php.net
After some discussion with Tim it appears this bug is still open. His
original conclusion changed one hour later but this report remained
untouched/closed. In summary: The origin of this bug has not been
confirmed.
------------------------------------------------------------------------
[2003-04-05 11:28:09] sniper@php.net
Not bug in PHP -> bogus.
------------------------------------------------------------------------
[2003-04-05 07:29:45] tim at danan dot com
I'm marking this one as closed. It appears that the problem was in
apache, not php. It looks like a couple of recent glibc rpm updates
were the source of the problem. After rebuilding apache and php I
haven't seen a seg faults in over 16 hours. Perviously I was seeing
5-10 per hour.
Thank you to those of you who took the time to help me with this
problem.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/23040
--
Edit this bug report at http://bugs.php.net/?id=23040&edit=1