PHP code produces ocasional segfaults.
Santiago Romero
sromero@servicom2000.com
Wed, 18 Jul 2001 08:23:53 +0200
Hi all...
I needed to add some ldap functions to IMP 2.2.5 so
I readed the PHP MANUAL and I found a code that
suits my needs in an example, but it produces segfaults.
I added the following code:
$ds=ldap_connect("ldap.server.com");
if ($ds)
{
$r=ldap_bind($ds);
$busca="mail=sromero@midomain.com";
$sr=ldap_search($ds,"dc=midomain,dc=com", $busca);
if( ldap_count_entries($ds,$sr) < 1 )
SetCookie( "can_use_attachs", "n", time()+3600 );
else
{
$info = ldap_get_entries($ds, $sr);
if( $info[0]["canuseattachs"][0] == 'y' )
SetCookie( "can_use_attachs", "y", time()+3600 );
else
SetCookie( "can_use_attachs", "n", time()+3600 );
}
ldap_close($ds);
}
When I reload THOUSANDS of times the above page (using
autoreload) and I've found that sometimes the above code
produces an Apache Crash. I get a "Document contained
no data" and apache/logs/error_log says:
[notice] child pid 1234 exit with Segmentation Fault
(core dump on /usr/apache).
I have lots of them on different times:
[Wed Jul 4 09:10:22 2001] [notice] child pid 29834 exit
signal Segmentation fault (11)
[Fri Jul 6 13:05:32 2001] [notice] child pid 30124 exit
signal Segmentation fault (11)
I did a backtrace on the core file:
(gdb) bt
#0 0xc01f2740 in kill () from /usr/lib/libc.2
#1 0x1a15a0 in sig_coredump ()
#2 <signal handler called>
#3 0xcda50 in read_next_token (tcm=0x40049b20, token=0x77ff1eb8,
phplval=0x77ff1d58) at token_cache.c:161
#4 0xb2f68 in phplex (phplval=0x77ff1d58) at main.c:488
#5 0xbb9d8 in phpparse () at /usr/lib/bison.simple:432
#6 0xb5974 in php3_parse (yyin=0x40113c98) at main.c:1564
#7 0xb5ed8 in apache_php3_module_main (r=0x400cd840, fd=26,
display_source_mode=0, preprocessed=0) at main.c:1929
#8 0xb18a4 in send_php3 ()
#9 0xb1970 in send_parsed_php3 ()
#10 0x197204 in ap_invoke_handler ()
#11 0x1ab36c in process_request_internal ()
#12 0x1ab3ec in ap_process_request ()
#13 0x1a2ff8 in child_main ()
#14 0x1a3254 in make_child ()
#15 0x1a35b8 in perform_idle_server_maintenance ()
#16 0x1a3b78 in standalone_main ()
#17 0x1a45c8 in main ()
The line 161 of token_cache.c contains:
GLOBAL(tc)->count++;
}
--> *token = &GLOBAL(tc)->tokens[GLOBAL(tc)->pos++];
return (*token)->token_type;
}
I think something with my above code is wrong, because If I
comment it using /* and */, then I don't get segfaults (never).
Any idea of rewriting the above code so that it works would
be very appreciated. To code the above I copied & pasted the
PHP manual LDAP functions example, so I don't understand why
the above code fails...
Thanks a lot.
--
Santiago Romero
Departamento de Sistemas
sromero@servicom2000.com
Av. Primado Reig 189, entlo
46020 Valencia - Spain
Telf. (+34) 96 332 12 00
Fax. (+34) 96 332 12 01
http://www.servicom2000.com
----- End forwarded message -----
--
Santiago Romero
Departamento de Sistemas
sromero@servicom2000.com
Av. Primado Reig 189, entlo
46020 Valencia - Spain
Telf. (+34) 96 332 12 00
Fax. (+34) 96 332 12 01
http://www.servicom2000.com