Re: [mp1] consistent segfaults with HTML::Mason

2003-08-28 Thread Stephen
Stephen [EMAIL PROTECTED] wrote:
 I'm no expert at debugging C, but I dont think that the above looks too
 healthy

Well, I think I have it figured out, more or less. The root cause of it
seemed to be a rather, um, interesting bit of code in
HTML::Mason::ApacheHandler which makes use of string eval and sprintf to
define the handler() subroutine. The intent was to create a handler()
routine suitable for both mod_perl 1 and 2 (prototype of ($$) vs attribute
of : method). However, for some reason or another, handler() was being
called as a regular sub, with one parameter.

Preloading the module and using the explicit Module-handler method syntax
in httpd.conf seems to have fixed it. (Having said that, it seems to be
working without the additional -handler now ... *sighs*. Either I failed
to add method handlers to the config before, or I'm collecting on a karmic
debt. Or both).

As for the segfaults, I patched my mod_perl source to return undef in that
situation as opposed to segfault, which seems slightly more reasonable
behaviour. Patch below:

--- src/modules/perl/Apache.xs-origFri Jun  6 12:31:10 2003
+++ src/modules/perl/Apache.xs Thu Aug 28 12:10:53 2003
@@ -2075,7 +2075,10 @@
SvREFCNT_dec(RETVAL); /* in case above did newSV(0) */
cs = (perl_server_config *)get_module_config(s-module_config,
 perl_module);
-   TABLE_GET_SET(cs-vars, FALSE);
+if(cs)  {
+   TABLE_GET_SET(cs-vars, FALSE);
+}
+else XSRETURN_UNDEF;
}
else XSRETURN_UNDEF;
 }

This has taught me more about XS and the um, interesting capabilities of
string eval than I ever wanted to know, I think. Please excuse me whilst I
take a cold shower or three...

Stephen Veiss





-- 
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html



Re: [mp1] consistent segfaults with HTML::Mason

2003-08-28 Thread Stas Bekman
Stephen wrote:

[...]

The intent was to create a handler()
routine suitable for both mod_perl 1 and 2 (prototype of ($$) vs attribute
of : method). However, for some reason or another, handler() was being
called as a regular sub, with one parameter.
I have used the technique documented here:
http://perl.apache.org/docs/2.0/user/porting/porting.html#Method_Handlers
which in short words comes to:

  sub handler_mp1 ($$) { mp1 }
  sub handler_mp2 : method { mp2 }
  *handler = MP2 ? \handler_mp2 : \handler_mp1;
One thing I forgot to mention, is that : method won't work with perl  5.6.

So if you can share your solution, I'd it to that section.

__
Stas BekmanJAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide --- http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


--
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html


Re: [mp1] consistent segfaults with HTML::Mason

2003-08-28 Thread Geoffrey Young


Stephen wrote:
Stephen [EMAIL PROTECTED] wrote:

I'm no expert at debugging C, but I dont think that the above looks too
healthy


Well, I think I have it figured out, more or less. The root cause of it
seemed to be a rather, um, interesting bit of code in
HTML::Mason::ApacheHandler which makes use of string eval and sprintf to
define the handler() subroutine. The intent was to create a handler()
routine suitable for both mod_perl 1 and 2 (prototype of ($$) vs attribute
of : method). However, for some reason or another, handler() was being
called as a regular sub, with one parameter.
mp1 supports both $$ and :method, so no need to do something special to make 
it work for both mp1 and mp2.

Preloading the module and using the explicit Module-handler method syntax
in httpd.conf seems to have fixed it. 
preloading is required in mp1.  the - syntax is not.

HTH

--Geoff



--
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html


Re: [mp1] consistent segfaults with HTML::Mason

2003-08-28 Thread Stephen
Geoffrey Young wrote:

 mp1 supports both $$ and :method, so no need to do something special to
make
 it work for both mp1 and mp2.

Aah, I'll pass that onto the Mason folks. Ta.

  Preloading the module and using the explicit Module-handler method
syntax
  in httpd.conf seems to have fixed it.

 preloading is required in mp1.  the - syntax is not.

Ah, looks like that was it, in that case.

Stephen Veiss





-- 
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html



[mp1] consistent segfaults with HTML::Mason

2003-08-27 Thread Stephen
Greetings,

I'm not sure if this should be sent here, or to the HTML::Mason list, but as
its a segfault, I've sent it here first. I've just upgraded my
apache/mod_perl installation, and have run into a few problems.

Firstly, all of mod_perl's tests pass (although a few are skipped), and
mod_perl itself seems to work (Apache::MP3 was the module I used for
testing, which seems to work). However, any attempt to use
HTML::Mason::ApacheHandler causes a segmentation fault.

I've looked though the various mod_perl and Mason FAQs/documentation, and
couldn't find anything regarding this. I'd be most appreciative if anyone
could point me in the right direction.

My system details are as below - I've included everything that seems to be
relevant from the list on http://perl.apache.org/bugs/.

I'm running FreeBSD 4.8-RELEASE, Perl 5.8.0, Apache 1.3.28 and mod_perl
1.28. mod_perl was compiled as a static module, using the following command
line in the mod_perl source directory:

perl Makefile.PL APACHE_SRC=../apache_1.3.28/src
APACHE_PREFIX=/usr/local/apache13 DO_HTTPD=1 USE_APACI=1 EVERYTHING=1

The following mod_perl tests were skipped (the rest all completed
sucessfully):

modules/cookieskipped
all skipped: no reason given
modules/moduleskipped
all skipped: no reason given
modules/request...skipped
all skipped: no reason given
modules/stage.skipped
all skipped: no reason given

My perl details are as follows:

Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration:
  Platform:
osname=freebsd, osvers=4.8-release, archname=i386-freebsd
uname='freebsd holly.mutatorr.net 4.8-release freebsd 4.8-release #0:
sat may 17 18:53:46 bst 2003
[EMAIL PROTECTED]:usrsrcsyscompileholly i386 '




config_args='-sde -Dprefix=/usr/local -Darchlib=/usr/local/lib/perl5/5.8.0/m
ach -Dprivlib=/usr/local/lib/perl5/5.8.0 -Dman3dir=/usr/local/lib/perl5/5.8.
0/man/man3 -Dsitearch=/usr/local/lib/perl5/site_perl/5.8.0/mach -Dsitelib=/u
sr/local/lib/perl5/site_perl/5.8.0 -Dscriptdir=/usr/local/bin -Ui_malloc -Ui
_iconv -Uinstallusrbinperl -Dcc=cc -Dccflags=-DAPPLLIB_EXP=/usr/local/lib/p
erl5/5.8.0/BSDPAN -Ui_gdbm -Dusemymalloc=n -Dusethreads=n'
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
  Compiler:
cc='cc', ccflags
='-DAPPLLIB_EXP=/usr/local/lib/perl5/5.8.0/BSDPAN -DHAS_FPSETMASK -DHAS_FL
OATINGPOINT_H -fno-strict-aliasing -I/usr/local/include',
optimize='-O -pipe ',




cppflags='-DAPPLLIB_EXP=/usr/local/lib/perl5/5.8.0/BSDPAN -DHAS_FPSETMASK 
-DHAS_FLOATINGPOINT_H -fno-strict-aliasing -I/usr/local/include'
ccversion='', gccversion='2.95.4 20020320 [FreeBSD]', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
  Linker and Libraries:
ld='cc', ldflags ='-Wl,-E  -L/usr/local/lib'
libpth=/usr/lib /usr/local/lib
libs=-lm -lc -lcrypt -lutil
perllibs=-lm -lc -lcrypt -lutil
libc=, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version=''
  Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-DPIC -fPIC', lddlflags='-shared  -L/usr/local/lib'


Characteristics of this binary (from libperl):
  Compile-time options: USE_LARGE_FILES
  Built under freebsd
  Compiled at May 26 2003 00:36:13
  @INC:
/usr/local/lib/perl5/site_perl/5.8.0/mach
/usr/local/lib/perl5/site_perl/5.8.0
/usr/local/lib/perl5/site_perl
/usr/local/lib/perl5/5.8.0/BSDPAN
/usr/local/lib/perl5/5.8.0/mach
/usr/local/lib/perl5/5.8.0

The GDB backtrace output (from debugging httpd -X) is as follows:

(gdb) bt
#0  0x808d079 in XS_Apache_dir_config ()
#1  0x810a7f7 in Perl_pp_entersub ()
#2  0x8104b24 in Perl_runops_standard ()
#3  0x80c39fe in Perl_call_sv ()
#4  0x80c3b42 in Perl_eval_sv ()
#5  0x80846ce in perl_require_module ()
#6  0x807f1ac in perl_call_handler ()
#7  0x807ecb4 in perl_run_stacked_handlers ()
#8  0x807d7a3 in perl_handler ()
#9  0x809bb8d in ap_invoke_handler ()
#10 0x80b185c in ap_some_auth_required ()
#11 0x80b1cec in ap_internal_redirect ()
#12 0x8076052 in ap_get_server_built ()
#13 0x809bb8d in ap_invoke_handler ()
#14 0x80b185c in ap_some_auth_required ()
#15 0x80b18c6 in ap_process_request ()
#16 0x80a817f in ap_child_terminate ()
#17 0x80a8341 in ap_child_terminate ()
#18 0x80a84ba in ap_child_terminate ()
#19 0x80a8b5c in ap_child_terminate ()
#20 0x80a93bc in main ()
#21 0x8064a22 in _start ()

The relavent sections of my httpd.conf are as follows:

VirtualHost *
DocumentRoot 

Re: [mp1] consistent segfaults with HTML::Mason

2003-08-27 Thread Stas Bekman
Stephen wrote:
[...]
The GDB backtrace output (from debugging httpd -X) is as follows:

(gdb) bt
#0  0x808d079 in XS_Apache_dir_config ()
#1  0x810a7f7 in Perl_pp_entersub ()
#2  0x8104b24 in Perl_runops_standard ()
#3  0x80c39fe in Perl_call_sv ()
#4  0x80c3b42 in Perl_eval_sv ()
#5  0x80846ce in perl_require_module ()
#6  0x807f1ac in perl_call_handler ()
#7  0x807ecb4 in perl_run_stacked_handlers ()
#8  0x807d7a3 in perl_handler ()
#9  0x809bb8d in ap_invoke_handler ()
#10 0x80b185c in ap_some_auth_required ()
#11 0x80b1cec in ap_internal_redirect ()
#12 0x8076052 in ap_get_server_built ()
#13 0x809bb8d in ap_invoke_handler ()
#14 0x80b185c in ap_some_auth_required ()
#15 0x80b18c6 in ap_process_request ()
#16 0x80a817f in ap_child_terminate ()
#17 0x80a8341 in ap_child_terminate ()
#18 0x80a84ba in ap_child_terminate ()
#19 0x80a8b5c in ap_child_terminate ()
#20 0x80a93bc in main ()
#21 0x8064a22 in _start ()
Wearing my bug-tender cap, but not taking the ownership of this bug, I should 
say that your backtrace could be much more useful if you have had rebuilt 
apache/perl/mod_perl with debugging symbols enabled. When you do that the 
trace will show the arguments to the functions. http://perl.apache.org/bugs/ 
provides the details on how to do that.

__
Stas BekmanJAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide --- http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


--
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html


Re: [mp1] consistent segfaults with HTML::Mason

2003-08-27 Thread Stephen
Stas Bekman [EMAIL PROTECTED] wrote:

 Wearing my bug-tender cap, but not taking the ownership of this bug, I
should
 say that your backtrace could be much more useful if you have had rebuilt
 apache/perl/mod_perl with debugging symbols enabled. When you do that the
 trace will show the arguments to the functions.
http://perl.apache.org/bugs/
 provides the details on how to do that.

Hrm. I thought I had. Let me try it again.

Aha. It would seem that make install strips symbols or something...

Program received signal SIGSEGV, Segmentation fault.
0x808ed0d in XS_Apache_dir_config (cv=0x81ce8cc) at Apache.c:3114
3114TABLE_GET_SET(cs-vars, FALSE);
(gdb) bt
#0  0x808ed0d in XS_Apache_dir_config (cv=0x81ce8cc) at Apache.c:3114
#1  0x810c3b3 in Perl_pp_entersub ()
#2  0x81066e0 in Perl_runops_standard ()
#3  0x80c55ba in S_call_body ()
#4  0x80c56fe in Perl_eval_sv ()
#5  0x80860ea in perl_require_module (name=0x8324f7c
HTML::Mason::ApacheHandler, s=0x827019c) at perl_util.c:550
#6  0x807ffdc in perl_call_handler (sv=0x81ce9ec, r=0x8323d34, args=0x0) at
mod_perl.c:1590
#7  0x807f9d1 in perl_run_stacked_handlers (hook=0x815f619 PerlHandler,
r=0x8323d34, handlers=0x81cea4c) at mod_perl.c:1374
#8  0x807dd37 in perl_handler (r=0x8323d34) at mod_perl.c:897
#9  0x809d811 in ap_invoke_handler (r=0x8323d34) at http_config.c:518
#10 0x80b3470 in process_request_internal (r=0x8323d34) at
http_request.c:1324
#11 0x80b3900 in ap_internal_redirect (new_uri=0x8323d0c /index.mhtml,
r=0x8323034) at http_request.c:1461
#12 0x8076042 in handle_dir (r=0x8323034) at mod_dir.c:174
#13 0x809d811 in ap_invoke_handler (r=0x8323034) at http_config.c:518
#14 0x80b3470 in process_request_internal (r=0x8323034) at
http_request.c:1324
#15 0x80b34da in ap_process_request (r=0x8323034) at http_request.c:1340
#16 0x80a9dcb in child_main (child_num_arg=0) at http_main.c:4653
#17 0x80a9f8d in make_child (s=0x819c034, slot=0, now=1062020715) at
http_main.c:4768
#18 0x80aa106 in startup_children (number_to_start=2) at http_main.c:4850
#19 0x80aa7a4 in standalone_main (argc=4, argv=0xbfbffa78) at
http_main.c:5169
#20 0x80ab004 in main (argc=4, argv=0xbfbffa78) at http_main.c:5511
#21 0x8064a6a in _start ()

(gdb) list
3109s = r  r-server ? r-server : perl_get_startup_server();
3110if (s  s-module_config) {
3111SvREFCNT_dec(RETVAL); /* in case above did newSV(0) */
3112cs = (perl_server_config
*)get_module_config(s-module_config,
3113
perl_module);
3114TABLE_GET_SET(cs-vars, FALSE);
3115}
3116else XSRETURN_UNDEF;
3117}
3118
(gdb) print cs
$4 = (perl_server_config *) 0x0

(gdb) print s
$6 = (server_rec *) 0x0

I'm no expert at debugging C, but I dont think that the above looks too
healthy

Stephen Veiss





-- 
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html