You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@perl.apache.org by Kiki <ki...@abc.ro> on 2004/04/01 13:10:11 UTC

[mp2] Segmentation fault when starting Apache with mod_perl [Apache 2.0.49 / Perl 5.8.2 / mod_perl 1.99_13]

On Wed, 31 Mar 2004 10:09:01 -0800
Stas Bekman <st...@stason.org> wrote:

BTW, I subscribed to the list, so you needn't reply to my address too :)

> But definitely move first to 1.99_13 because we aren't going to debug on 
> 1.99_12 and we need to be on the same page to have a better chance to 
> reproduce the problem.

OK, I tried 1.99_13 with the same results. The build environment is the same as for 1.99_12 so I guess the same Bug Report Info applies here too (I can generate
another bug report if you need it though)

> We are not aware of this problem, Kiki. You need to give us more matter to be 
> able to understand your problem. You don't have a problem to start the modperl > test suite, do you? 

In fact any attempt to start apache with mod_perl (including the one in the test suite) causes a segmentation fault. 

> If that's the case, you need to show us what configuration 
> causes that, coming with a minimal possible case that you can still reproduce 
> the problem with.

1. The command used to start apache is:

[kiki@eris ~/work/mod_perl-1.99_13]$ /usr/local/sbin/httpd -d /usr/home/kiki/work/mod_perl-1.99_13/t -f /usr/home/kiki/work/mod_perl-1.99_13/t/conf/httpd.conf -D APACHE2 -D PERL_USEITHREADS
Segmentation fault (core dumped)

2. The backtrace for the core file is:
(gdb) backtrace 
#0  0x290ed4f7 in Perl_newSVpvn ()
   from /usr/local/lib/perl5/5.8.2/mach/CORE/libperl.so
#1  0x2913e219 in PerlIO_open ()
   from /usr/local/lib/perl5/5.8.2/mach/CORE/libperl.so
#2  0x29072363 in S_open_script ()
   from /usr/local/lib/perl5/5.8.2/mach/CORE/libperl.so
#3  0x2906f5a2 in S_parse_body ()
   from /usr/local/lib/perl5/5.8.2/mach/CORE/libperl.so
#4  0x2906e994 in perl_parse ()
   from /usr/local/lib/perl5/5.8.2/mach/CORE/libperl.so
#5  0x2902b78c in modperl_startup ()
   from /usr/home/kiki/work/mod_perl-1.99_13/src/modules/perl/mod_perl.so
#6  0x2902b6ec in modperl_startup ()
   from /usr/home/kiki/work/mod_perl-1.99_13/src/modules/perl/mod_perl.so
#7  0x2902bb19 in modperl_run ()
   from /usr/home/kiki/work/mod_perl-1.99_13/src/modules/perl/mod_perl.so
#8  0x29030b69 in modperl_cmd_load_module ()
   from /usr/home/kiki/work/mod_perl-1.99_13/src/modules/perl/mod_perl.so
#9  0x80664ca in invoke_cmd ()
#10 0x8067097 in ap_walk_config_sub ()
#11 0x80690f1 in ap_process_config_tree ()
#12 0x806bfae in main ()
#13 0x805d026 in _start ()
(gdb) 


3. The httpd.conf configuration I've tried is the one generated by the test suite:
(I don't know which modules are optional and which are necessary, so if you could give me some hints for a more simple configuration, I will try it)

# WARNING: this file is generated, do not edit
# 01: /usr/home/kiki/work/mod_perl-1.99_13/Apache-Test/lib/Apache/TestConfig.pm:780
# 02: /usr/home/kiki/work/mod_perl-1.99_13/Apache-Test/lib/Apache/TestConfig.pm:798
# 03: /usr/home/kiki/work/mod_perl-1.99_13/Apache-Test/lib/Apache/TestConfig.pm:1355
# 04: /usr/home/kiki/work/mod_perl-1.99_13/Apache-Test/lib/Apache/TestRun.pm:490
# 05: /usr/home/kiki/work/mod_perl-1.99_13/Apache-Test/lib/Apache/TestRunPerl.pm:55
# 06: /usr/home/kiki/work/mod_perl-1.99_13/Apache-Test/lib/Apache/TestRun.pm:700
# 07: /usr/home/kiki/work/mod_perl-1.99_13/Apache-Test/lib/Apache/TestRun.pm:700
# 08: t/TEST:20

<IfModule !mod_access.c>
    LoadModule access_module "/usr/local/libexec/apache2/mod_access.so"
</IfModule>

<IfModule !mod_auth.c>
    LoadModule auth_module "/usr/local/libexec/apache2/mod_auth.so"
</IfModule>

<IfModule !mod_auth_anon.c>
    LoadModule auth_anon_module "/usr/local/libexec/apache2/mod_auth_anon.so"
</IfModule>

<IfModule !mod_auth_dbm.c>
    LoadModule auth_dbm_module "/usr/local/libexec/apache2/mod_auth_dbm.so"
</IfModule>

<IfModule !mod_ext_filter.c>
    LoadModule ext_filter_module "/usr/local/libexec/apache2/mod_ext_filter.so"
</IfModule>

<IfModule !mod_include.c>
    LoadModule include_module "/usr/local/libexec/apache2/mod_include.so"
</IfModule>

<IfModule !mod_deflate.c>
    LoadModule deflate_module "/usr/local/libexec/apache2/mod_deflate.so"
</IfModule>

<IfModule !mod_log_config.c>
    LoadModule log_config_module "/usr/local/libexec/apache2/mod_log_config.so"
</IfModule>

<IfModule !mod_env.c>
    LoadModule env_module "/usr/local/libexec/apache2/mod_env.so"
</IfModule>

<IfModule !mod_mime_magic.c>
    LoadModule mime_magic_module "/usr/local/libexec/apache2/mod_mime_magic.so"
</IfModule>

<IfModule !mod_cern_meta.c>
    LoadModule cern_meta_module "/usr/local/libexec/apache2/mod_cern_meta.so"
</IfModule>

<IfModule !mod_expires.c>
    LoadModule expires_module "/usr/local/libexec/apache2/mod_expires.so"
</IfModule>

<IfModule !mod_headers.c>
    LoadModule headers_module "/usr/local/libexec/apache2/mod_headers.so"
</IfModule>

<IfModule !mod_usertrack.c>
    LoadModule usertrack_module "/usr/local/libexec/apache2/mod_usertrack.so"
</IfModule>

<IfModule !mod_unique_id.c>
    LoadModule unique_id_module "/usr/local/libexec/apache2/mod_unique_id.so"
</IfModule>

<IfModule !mod_setenvif.c>
    LoadModule setenvif_module "/usr/local/libexec/apache2/mod_setenvif.so"
</IfModule>

<IfModule !mod_ssl.c>
    LoadModule ssl_module "/usr/local/libexec/apache2/mod_ssl.so"
</IfModule>

<IfModule !mod_mime.c>
    LoadModule mime_module "/usr/local/libexec/apache2/mod_mime.so"
</IfModule>

<IfModule !mod_status.c>
    LoadModule status_module "/usr/local/libexec/apache2/mod_status.so"
</IfModule>

<IfModule !mod_autoindex.c>
    LoadModule autoindex_module "/usr/local/libexec/apache2/mod_autoindex.so"
</IfModule>

<IfModule !mod_asis.c>
    LoadModule asis_module "/usr/local/libexec/apache2/mod_asis.so"
</IfModule>

<IfModule !mod_info.c>
    LoadModule info_module "/usr/local/libexec/apache2/mod_info.so"
</IfModule>

<IfModule !mod_cgi.c>
    LoadModule cgi_module "/usr/local/libexec/apache2/mod_cgi.so"
</IfModule>

<IfModule !mod_vhost_alias.c>
    LoadModule vhost_alias_module "/usr/local/libexec/apache2/mod_vhost_alias.so"
</IfModule>

<IfModule !mod_negotiation.c>
    LoadModule negotiation_module "/usr/local/libexec/apache2/mod_negotiation.so"
</IfModule>

<IfModule !mod_dir.c>
    LoadModule dir_module "/usr/local/libexec/apache2/mod_dir.so"
</IfModule>

<IfModule !mod_imap.c>
    LoadModule imap_module "/usr/local/libexec/apache2/mod_imap.so"
</IfModule>

<IfModule !mod_actions.c>
    LoadModule actions_module "/usr/local/libexec/apache2/mod_actions.so"
</IfModule>

<IfModule !mod_speling.c>
    LoadModule speling_module "/usr/local/libexec/apache2/mod_speling.so"
</IfModule>

<IfModule !mod_userdir.c>
    LoadModule userdir_module "/usr/local/libexec/apache2/mod_userdir.so"
</IfModule>

<IfModule !mod_alias.c>
    LoadModule alias_module "/usr/local/libexec/apache2/mod_alias.so"
</IfModule>

<IfModule !mod_rewrite.c>
    LoadModule rewrite_module "/usr/local/libexec/apache2/mod_rewrite.so"
</IfModule>

<IfModule !mod_php4.c>
    LoadModule php4_module "/usr/local/libexec/apache2/libphp4.so"
</IfModule>

<IfModule !mod_dav.c>
    LoadModule dav_module "/usr/local/libexec/apache2/mod_dav.so"
</IfModule>

<IfModule !mod_dav_svn.c>
    LoadModule dav_svn_module "/usr/local/libexec/apache2/mod_dav_svn.so"
</IfModule>

<IfModule !mod_authz_svn.c>
    LoadModule authz_svn_module "/usr/local/libexec/apache2/mod_authz_svn.so"
</IfModule>

<IfModule !mod_mime.c>
    LoadModule mime_module "/usr/local/libexec/apache2/mod_mime.so"
</IfModule>


<IfModule !mod_perl.c>
    LoadModule perl_module "/usr/home/kiki/work/mod_perl-1.99_13/src/modules/perl/mod_perl.so"
</IfModule>


User    kiki
Group    users
ServerName localhost:8529
Listen     localhost:8529

ServerRoot   "/usr/home/kiki/work/mod_perl-1.99_13/t"
DocumentRoot "/usr/home/kiki/work/mod_perl-1.99_13/t/htdocs"

PidFile     /usr/home/kiki/work/mod_perl-1.99_13/t/logs/httpd.pid
ErrorLog    /usr/home/kiki/work/mod_perl-1.99_13/t/logs/error_log
LogLevel    debug

<IfModule mod_log_config.c>
    TransferLog /usr/home/kiki/work/mod_perl-1.99_13/t/logs/access_log
</IfModule>

ServerAdmin calimanesti@eris.abc.ro

#needed for http/1.1 testing
KeepAlive       On

HostnameLookups Off

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

<IfModule worker.c>
    StartServers         1
    MaxClients           2
    MinSpareThreads      2
    MaxSpareThreads      2
    ThreadsPerChild      2
    MaxRequestsPerChild  0
</IfModule>

<IfModule perchild.c>
    NumServers           1
    StartThreads         2
    MinSpareThreads      2
    MaxSpareThreads      2
    MaxThreadsPerChild   2
    MaxRequestsPerChild  0
</IfModule>

<IfModule prefork.c>
    StartServers         1
    MaxClients           2
    MaxRequestsPerChild  0
</IfModule>

<IfDefine APACHE1>
    StartServers         1
    MaxClients           2
    MaxRequestsPerChild  0
</IfDefine>

<IfModule mpm_winnt.c>
    ThreadsPerChild      20
    MaxRequestsPerChild  0
</IfModule>

<Location /server-info>
    SetHandler server-info
</Location>

<Location /server-status>
    SetHandler server-status
</Location>

<IfModule !mod_alias.c>
    LoadModule alias_module "/usr/local/libexec/apache2/mod_alias.so"
</IfModule>
<IfModule mod_alias.c>
    Alias /getfiles-binary-perl /usr/local/bin/perl5.8.2
    Alias /getfiles-perl-pod /usr/local/lib/perl5/5.8.2/pod
    Alias /getfiles-binary-httpd /usr/local/sbin/httpd
</IfModule>

TypesConfig "/usr/local/etc/apache2/mime.types"
Include "/usr/home/kiki/work/mod_perl-1.99_13/t/conf/extra.conf"
<IfModule mod_perl.c>
    PerlPassEnv APACHE_TEST_TRACE_LEVEL
</IfModule>

<IfModule mod_perl.c>
    PerlSwitches -Mlib=/usr/home/kiki/work/mod_perl-1.99_13/t
</IfModule>

<IfModule mod_perl.c>
    PerlRequire /usr/home/kiki/work/mod_perl-1.99_13/t/conf/modperl_startup.pl
</IfModule>

PerlModule TestAPI::internal_redirect
<Location /TestAPI__internal_redirect_modperl>
    SetHandler modperl
    PerlResponseHandler TestAPI::internal_redirect::modperl
</Location>
<Location /TestAPI__internal_redirect_perl_script>
    SetHandler perl-script
    PerlResponseHandler TestAPI::internal_redirect::perl_script
</Location>

<Location /TestAPI__show>
    SetHandler modperl
    PerlResponseHandler TestAPI::show
</Location>

<Location /TestAPI__access>
    Options None
    Options Indexes FollowSymLinks
    AuthName modperl
    AuthType none
    SetHandler modperl
    PerlResponseHandler TestAPI::access
</Location>

<Location /TestAPI__request_rec>
    PerlOptions +GlobalRequest
    SetHandler modperl
    PerlResponseHandler TestAPI::request_rec
</Location>

<Location /TestAPI__server_util>
    SetHandler modperl
    PerlResponseHandler TestAPI::server_util
</Location>

<Location /TestAPI__server_rec>
    SetHandler modperl
    PerlResponseHandler TestAPI::server_rec
</Location>

<Location /TestAPI__lookup_uri2__myplan>
    SetHandler modperl
    PerlResponseHandler TestAPI::lookup_uri2::myplan
</Location>
<Location /TestAPI__lookup_uri2__ok3>
    SetHandler modperl
    PerlResponseHandler TestAPI::lookup_uri2::ok3
</Location>
<Location /TestAPI__lookup_uri2>
    SetHandler modperl
    PerlResponseHandler TestAPI::lookup_uri2
</Location>

<Location /lookup_uri>
    SetHandler modperl
    PerlResponseHandler Apache::TestHandler::ok1
</Location>
<Location /TestAPI__lookup_uri>
    SetHandler modperl
    PerlResponseHandler TestAPI::lookup_uri
</Location>

<Location /TestAPI__conn_rec>
    SetHandler modperl
    PerlResponseHandler TestAPI::conn_rec
</Location>

PerlModule TestAPI::rflush
<Location /TestAPI__rflush>
    SetHandler perl-script
    PerlResponseHandler TestAPI::rflush::response
    PerlOutputFilterHandler TestAPI::rflush::bracket
</Location>

<Location /TestAPI__response>
    SetHandler modperl
    PerlResponseHandler TestAPI::response
</Location>

<Location /TestAPI__query>
    SetHandler modperl
    PerlResponseHandler TestAPI::query
</Location>

<Location /TestAPI__r_subclass>
    SetHandler perl-script
    PerlOptions -GlobalRequest
    PerlResponseHandler TestAPI::r_subclass
</Location>

<Location /TestAPI__server_const>
    SetHandler modperl
    PerlResponseHandler TestAPI::server_const
</Location>

<Location /TestAPI__uri>
    SetHandler modperl
    PerlResponseHandler TestAPI::uri
</Location>

<Location /TestAPI__aplog>
    SetHandler modperl
    PerlResponseHandler TestAPI::aplog
</Location>

<Location /TestAPI__sendfile>
    SetHandler modperl
    PerlResponseHandler TestAPI::sendfile
</Location>

<Location /TestAPI__rutil>
    SetHandler modperl
    PerlResponseHandler TestAPI::rutil
</Location>

<Location /TestAPI__module>
    SetHandler modperl
    PerlResponseHandler TestAPI::module
</Location>

Alias /slurp/ /usr/home/kiki/work/mod_perl-1.99_13/t/htdocs/api/
<Location /slurp/>
    SetHandler modperl
    PerlResponseHandler TestAPI::slurp_filename
</Location>

<Location /TestModules__cgi2>
    SetHandler modperl
    PerlResponseHandler TestModules::cgi2
</Location>

<Location /TestModules__cgiupload>
    SetHandler perl-script
    PerlOptions +GlobalRequest
    PerlResponseHandler TestModules::cgiupload
</Location>

<Location /TestModules__cgipost2>
    SetHandler modperl
    PerlResponseHandler TestModules::cgipost2
</Location>

<IfModule mod_proxy.c>
    <Proxy http://localhost:8529/*>
        <IfModule mod_access.c>
            Order Deny,Allow
            Deny from all
            Allow from localhost
        </IfModule>
    </Proxy>
    
    PerlModule TestModules::proxy
    PerlTransHandler TestModules::proxy::proxy
    <Location /TestModules__proxy_real>
        SetHandler modperl
        PerlResponseHandler TestModules::proxy::response
    </Location>
</IfModule>

<Location /TestModules__cgiupload2>
    SetHandler modperl
    PerlResponseHandler TestModules::cgiupload2
</Location>

<Location /TestModules__cgipost>
    SetHandler perl-script
    PerlOptions +GlobalRequest
    PerlResponseHandler TestModules::cgipost
</Location>

<Location /TestModules__cgi>
    SetHandler perl-script
    PerlOptions -SetupEnv
    PerlResponseHandler TestModules::cgi
</Location>

# notice that perl-script is used on purpose here - testing whether
# :Apache perlio is reentrant (SetHandler modperl doesn't go through
# :Apache perlio layer)
# it's silly that we have to duplicate the resource, but mod_include
# otherwise thinks we have a recursive call loop
<Location /TestModules__include_subreq_dup>
    PerlSetOutputFilter INCLUDES
    Options +IncludesNoExec
    SetHandler perl-script
    PerlResponseHandler TestModules::include_subreq
</Location>
<Location /TestModules__include_subreq>
    SetHandler perl-script
    PerlSetOutputFilter INCLUDES
    Options +IncludesNoExec
    PerlResponseHandler TestModules::include_subreq
</Location>

<Location /TestModperl__print>
    SetHandler modperl
    PerlResponseHandler TestModperl::print
</Location>

<Location /TestModperl__endav>
    SetHandler perl-script
    PerlResponseHandler TestModperl::endav
</Location>

<Location /TestModperl__print_utf8>
    SetHandler perl-script
    PerlResponseHandler TestModperl::print_utf8
</Location>

<Location /TestModperl__print_utf8_2>
    SetHandler modperl
    PerlResponseHandler TestModperl::print_utf8_2
</Location>

PerlModule TestModperl::cookie
<Location /TestModperl__cookie>
    SetHandler perl-script
    PerlInitHandler Apache::TestHandler::same_interp_fixup
    PerlAccessHandler TestModperl::cookie::access
    PerlResponseHandler TestModperl::cookie
    PerlOptions -SetupEnv
</Location>

<Location /TestModperl__setauth>
    SetHandler modperl
    PerlResponseHandler TestModperl::setauth
</Location>

PerlSetVar TestModperl__request_rec_Key_set_in_Base BaseValue

PerlSetVar TestModperl__server_rec_Key_set_in_Base 1_SetValue
PerlAddVar TestModperl__server_rec_Key_set_in_Base 2_AddValue 3_AddValue
<Location /TestModperl__dir_config>
    PerlSetVar TestModperl__request_rec_ZeroKey 0
    PerlSetVar TestModperl__request_rec_Key0 SetValue0
    PerlSetVar TestModperl__request_rec_Key1 ToBeLost
    PerlSetVar TestModperl__request_rec_Key1 1_SetValue
    PerlAddVar TestModperl__request_rec_Key1 2_AddValue
    PerlAddVar TestModperl__request_rec_Key1 3_AddValue 4_AddValue
    PerlSetVar TestModperl__server_rec_Key_set_in_Base SubSecValue
    SetHandler modperl
    PerlResponseHandler TestModperl::dir_config
</Location>

PerlModule TestModperl::cookie2
<Location /TestModperl__cookie2>
    SetHandler modperl
    PerlInitHandler Apache::TestHandler::same_interp_fixup
    PerlAccessHandler TestModperl::cookie2::access
    PerlResponseHandler TestModperl::cookie2
</Location>

PerlModule TestModperl::current_callback
<Location /TestModperl__current_callback>
    PerlHeaderParserHandler TestModperl::current_callback::headerparser
    PerlFixupHandler TestModperl::current_callback::fixup
    PerlResponseHandler TestModperl::current_callback
    PerlLogHandler TestModperl::current_callback::log
    SetHandler modperl
</Location>

<Location /TestModperl__request_rec_perlio_api>
    SetHandler perl-script
    PerlResponseHandler TestModperl::request_rec_perlio_api
</Location>

<Location /TestModperl__getc>
    SetHandler modperl
    PerlResponseHandler TestModperl::getc
</Location>

<Location /TestModperl__io_nested_with_closed_stds>
    SetHandler perl-script
    PerlResponseHandler TestModperl::io_nested_with_closed_stds
</Location>

PerlModule TestModperl::merge

Listen localhost:8530
<VirtualHost _default_:8530>
    ServerName localhost:8530
    # these should pass through all merges untouched
    PerlPassEnv  APACHE_TEST_HOSTTYPE
    PerlSetEnv   MergeSetEnv1  SetEnv1Val
    PerlSetVar   MergeSetVar1  SetVar1Val
    PerlSetVar   MergeAddVar1  AddVar1Val1
    PerlAddVar   MergeAddVar1  AddVar1Val2
    
    # these are overridden in /merge2 and /merge2/merge3.html
    PerlSetEnv   MergeSetEnv2  SetEnv2Val
    PerlSetVar   MergeSetVar2  SetVar2Val
    PerlSetVar   MergeAddVar2  AddVar2Val1
    PerlAddVar   MergeAddVar2  AddVar2Val2
    
    # these are overridden in /merge2/merge3.html only
    PerlSetEnv   MergeSetEnv3  SetEnv3Val
    PerlSetVar   MergeSetVar3  SetVar3Val
    PerlSetVar   MergeAddVar3  AddVar3Val1
    PerlAddVar   MergeAddVar3  AddVar3Val2
    
    <Location /merge>
        # same as per-server level
        SetHandler perl-script
        PerlResponseHandler TestModperl::merge
    </Location>
    
    AccessFileName htaccess
    <Directory /usr/home/kiki/work/mod_perl-1.99_13/t/htdocs/merge2>
        # overrides "2" values - "1" and "3" values left untouched
        PerlSetEnv   MergeSetEnv2  SetEnv2Merge2Val
        PerlSetVar   MergeSetVar2  SetVar2Merge2Val
        PerlSetVar   MergeAddVar2  AddVar2Merge2Val1
        PerlAddVar   MergeAddVar2  AddVar2Merge2Val2
        
        SetHandler perl-script
        PerlResponseHandler TestModperl::merge
        
        # don't trigger htaccess files automatically
        AllowOverride none
        
        <Files merge3.html>
            # initiate a double merge with htaccess file
            AllowOverride all
        </Files>
    </Directory>
    
</VirtualHost>

<Location /TestModperl__subenv>
    PerlOptions -SetupEnv
    SetHandler modperl
    PerlResponseHandler TestModperl::subenv
</Location>

<Location /TestModperl__methodobj>
    PerlResponseHandler $TestModperl::MethodObj->handler
    SetHandler modperl
</Location>

<Location /TestModperl__method>
    SetHandler modperl
    PerlResponseHandler TestModperl::method
</Location>

<Location /TestModperl__pnotes>
    SetHandler modperl
    PerlResponseHandler TestModperl::pnotes
</Location>

<Location /TestModperl__perl>
    SetHandler modperl
    PerlResponseHandler TestModperl::perl
</Location>

<Location /TestModperl__exit>
    SetHandler modperl
    PerlResponseHandler TestModperl::exit
</Location>

<Location /TestModperl__request_rec_tie_api>
    SetHandler modperl
    PerlResponseHandler TestModperl::request_rec_tie_api
</Location>

<Location /TestModperl__readline>
    SetHandler modperl
    PerlResponseHandler TestModperl::readline
</Location>

PerlModule TestModperl::printf
<Location /TestModperl__printf>
    PerlFixupHandler TestModperl::printf::fixup
    SetHandler modperl
    PerlResponseHandler TestModperl::printf
</Location>

<Location /TestModperl__post_utf8>
    SetHandler perl-script
    PerlResponseHandler TestModperl::post_utf8
</Location>

<Location /TestModperl__env>
    SetHandler perl-script
    PerlResponseHandler TestModperl::env
</Location>

<Location /TestModperl__status>
    SetHandler modperl
    PerlResponseHandler TestModperl::status
</Location>

<Location /TestModperl__sameinterp>
    PerlFixupHandler Apache::TestHandler::same_interp_fixup
    SetHandler modperl
    PerlResponseHandler TestModperl::sameinterp
</Location>

Listen localhost:8531
<VirtualHost _default_:8531>
    ServerName localhost:8531
    PerlOptions -PreConnection -ProcessConnection
    PerlOptions -Autoload -Log -InputFilter -OutputFilter
    PerlOptions +ChildInit +ChildExit
    PerlModule TestModperl::perl_options
    PerlOptions +ParseHeaders
    <Location /TestModperl__perl_options>
        SetHandler modperl
        PerlOptions -GlobalRequest -SetupEnv
        PerlOptions +MergeHandlers
        PerlResponseHandler TestModperl::perl_options
    </Location>
</VirtualHost>

PerlModule TestModperl::io_with_closed_stds
<Location /TestModperl__io_with_closed_stds>
    SetHandler perl-script
    PerlFixupHandler TestModperl::io_with_closed_stds::fixup
    PerlResponseHandler TestModperl::io_with_closed_stds
    PerlCleanupHandler TestModperl::io_with_closed_stds::cleanup
</Location>

<Location /TestModperl__taint>
    SetHandler modperl
    PerlResponseHandler TestModperl::taint
</Location>

<Location /TestModperl__methodname>
    PerlResponseHandler TestModperl::methodname->response
    SetHandler modperl
</Location>

# create a separate virtual host so we can use
# keepalives - a per-connection interpreter is
# the only way to make sure that we can plan in
# one request and test in subsequent tests
Listen localhost:8532
<VirtualHost _default_:8532>
    ServerName localhost:8532
    
    KeepAlive On
    
    <IfDefine PERL_ITHREADS>
        PerlInterpScope connection
    </IfDefine>
    
    PerlModule TestModperl::setupenv
    
    PerlPostReadRequestHandler TestModperl::setupenv::subenv_one
    
    # SetEnv is affected by +SetupEnv
    SetEnv SRV_SETENV server
    
    # PerlSetEnv is not affected by +SetupEnv or -SetupEnv
    # it is entirely separate and always set if configured
    PerlSetEnv SRV_PERLSETENV server
    
    # plan
    <Location /TestModperl__setupenv>
        SetHandler modperl
        PerlResponseHandler TestModperl::setupenv
    </Location>
    
    # default modperl handler
    # %ENV should not contain standard CGI variables
    # or entries from the subprocess_env table
    <Location /TestModperl__setupenv_mpdefault>
        SetHandler modperl
        PerlResponseHandler TestModperl::setupenv::noenv
        
        PerlFixupHandler TestModperl::setupenv::subenv_two
        
        SetEnv DIR_SETENV mpdefault
        PerlSetEnv DIR_PERLSETENV mpdefault
    </Location>
    
    # modperl handler + SetupEnv
    # %ENV should contain CGI variables as well as
    # anything put into the subprocess_env table
    <Location /TestModperl__setupenv_mpsetup>
        SetHandler modperl
        PerlResponseHandler TestModperl::setupenv::env
        
        PerlOptions +SetupEnv
        
        PerlFixupHandler TestModperl::setupenv::subenv_two
        
        SetEnv DIR_SETENV mpsetup
        PerlSetEnv DIR_PERLSETENV mpsetup
    </Location>
    
    # $r->subprocess_env in a void context with no args
    # should do the same as +SetupEnv wrt CGI variables
    # and entries already in the subprocess_env table
    # but subprocess_env entries that appear later will
    # not show up in %ENV
    <Location /TestModperl__setupenv_mpvoid>
        SetHandler modperl
        PerlResponseHandler TestModperl::setupenv::someenv
        
        PerlHeaderParserHandler TestModperl::setupenv::subenv_void
        PerlFixupHandler TestModperl::setupenv::subenv_two
        
        SetEnv DIR_SETENV mpvoid
        PerlSetEnv DIR_PERLSETENV mpvoid
    </Location>
    
    # +SetupEnv should always populate %ENV fully prior
    # to running the content handler (regardless of when
    # $r->subprocess_env() was called) to ensure that
    # %ENV is an accurate representation of the
    # subprocess_env table
    <Location /TestModperl__setupenv_mpsetupvoid>
        SetHandler modperl
        PerlResponseHandler TestModperl::setupenv::env
        
        PerlOptions +SetupEnv
        
        PerlHeaderParserHandler TestModperl::setupenv::subenv_void
        PerlFixupHandler TestModperl::setupenv::subenv_two
        
        SetEnv DIR_SETENV mpsetupvoid
        PerlSetEnv DIR_PERLSETENV mpsetupvoid
    </Location>
    
    # default perl-script handler is equivalent to +SetupEnv
    # CGI variables and subprocess_env entries will be in %ENV
    <Location /TestModperl__setupenv_psdefault>
        SetHandler perl-script
        PerlResponseHandler TestModperl::setupenv::env
        
        PerlFixupHandler TestModperl::setupenv::subenv_two
        
        SetEnv DIR_SETENV psdefault
        PerlSetEnv DIR_PERLSETENV psdefault
    </Location>
    
    # -SetupEnv should not put CGI variables or subprocess_env
    # entries in %ENV
    <Location /TestModperl__setupenv_psnosetup>
        SetHandler perl-script
        PerlResponseHandler TestModperl::setupenv::noenv
        
        PerlOptions -SetupEnv
        
        PerlFixupHandler TestModperl::setupenv::subenv_two
        
        SetEnv DIR_SETENV psnosetup
        PerlSetEnv DIR_PERLSETENV psnosetup
    </Location>
    
    # +SetupEnv should always populate %ENV fully prior
    # to running the content handler (regardless of when
    # $r->subprocess_env() was called) to ensure that
    # %ENV is an accurate representation of the
    # subprocess_env table
    <Location /TestModperl__setupenv_psvoid>
        SetHandler perl-script
        PerlResponseHandler TestModperl::setupenv::env
        
        PerlHeaderParserHandler TestModperl::setupenv::subenv_void
        PerlFixupHandler TestModperl::setupenv::subenv_two
        
        SetEnv DIR_SETENV psvoid
        PerlSetEnv DIR_PERLSETENV psvoid
    </Location>
    
    # equivalent to modperl handler with $r->subprocess_env() - 
    # CGI variables are there, but not subprocess_env entries
    # that are populated after the void call
    <Location /TestModperl__setupenv_psnosetupvoid>
        SetHandler perl-script
        PerlResponseHandler TestModperl::setupenv::someenv
        
        PerlOptions -SetupEnv
        
        PerlHeaderParserHandler TestModperl::setupenv::subenv_void
        PerlFixupHandler TestModperl::setupenv::subenv_two
        
        SetEnv DIR_SETENV psnosetupvoid
        PerlSetEnv DIR_PERLSETENV psnosetupvoid
    </Location>
</VirtualHost>

<Location /TestDirective__pod>
    SetHandler modperl
    PerlResponseHandler TestDirective::pod
</Location>

<Location /TestDirective__perldo>
    SetHandler modperl
    PerlResponseHandler TestDirective::perldo
</Location>

<Location /TestDirective__setupenv>
    PerlOptions +SetupEnv
    SetHandler modperl
    PerlResponseHandler TestDirective::setupenv
</Location>

# SetupEnv ought to have no effect on PerlSetEnv or PerlPassEnv
# per-server entry overwritten by per-directory entry
PerlSetEnv TestDirective__env_srv1 env_srv1

# per-server entry not overwritten
PerlSetEnv TestDirective__env_srv2 env_srv2

# PerlPassEnv is only per-server
PerlPassEnv APACHE_TEST_HOSTNAME
# per-directory entry overwrites per-server
# PerlSetEnv resets the table for each directive
<Location /TestDirective__env>
    PerlOptions -SetupEnv
    PerlSetEnv TestDirective__env_srv1 env_dir1
    PerlSetEnv TestDirective__env_dir2 ToBeLost
    PerlSetEnv TestDirective__env_dir2 env_dir2
    SetHandler modperl
    PerlResponseHandler TestDirective::env
</Location>

<Location /TestAPR__brigade>
    SetHandler modperl
    PerlResponseHandler TestAPR::brigade
</Location>

<Location /TestAPR__util>
    SetHandler modperl
    PerlResponseHandler TestAPR::util
</Location>

<Location /TestAPR__finfo>
    SetHandler modperl
    PerlResponseHandler TestAPR::finfo
</Location>

<Location /TestAPR__netlib>
    SetHandler modperl
    PerlResponseHandler TestAPR::netlib
</Location>

<Location /TestAPR__pool>
    SetHandler modperl
    PerlResponseHandler TestAPR::pool
</Location>

<Location /TestAPR__uuid>
    SetHandler modperl
    PerlResponseHandler TestAPR::uuid
</Location>

<Location /TestAPR__string>
    SetHandler modperl
    PerlResponseHandler TestAPR::string
</Location>

<Location /TestAPR__table>
    SetHandler modperl
    PerlResponseHandler TestAPR::table
</Location>

<Location /TestAPR__socket>
    SetHandler modperl
    PerlResponseHandler TestAPR::socket
</Location>

<Location /TestAPR__flatten>
    SetHandler modperl
    PerlResponseHandler TestAPR::flatten
</Location>

<Location /TestAPR__os>
    SetHandler modperl
    PerlResponseHandler TestAPR::os
</Location>

<Location /TestAPR__perlio>
    SetHandler modperl
    PerlResponseHandler TestAPR::perlio
</Location>

<Location /TestAPR__threadmutex>
    SetHandler modperl
    PerlResponseHandler TestAPR::threadmutex
</Location>

<Location /TestAPR__date>
    SetHandler modperl
    PerlResponseHandler TestAPR::date
</Location>

<Location /TestAPR__base64>
    SetHandler modperl
    PerlResponseHandler TestAPR::base64
</Location>

# this should work regardless whether parse headers is on or off
<Location /TestApache__send_cgi_header>
    PerlOptions -ParseHeaders
    SetHandler modperl
    PerlResponseHandler TestApache::send_cgi_header
</Location>

<Location /TestApache__subprocess>
    SetHandler modperl
    PerlResponseHandler TestApache::subprocess
</Location>

<Location /TestApache__write>
    SetHandler modperl
    PerlResponseHandler TestApache::write
</Location>

<Location /TestApache__scanhdrs2>
    SetHandler perl-script
    PerlOptions +ParseHeaders
    PerlResponseHandler TestApache::scanhdrs2
</Location>

<Location /TestApache__post>
    SetHandler modperl
    PerlResponseHandler TestApache::post
</Location>

<Location /TestApache__read>
    SetHandler modperl
    PerlResponseHandler TestApache::read
</Location>

<Location /TestApache__conftree>
    SetHandler modperl
    PerlResponseHandler TestApache::conftree
</Location>

<Location /TestApache__discard_rbody>
    SetHandler modperl
    PerlResponseHandler TestApache::discard_rbody
</Location>

<Location /TestApache__scanhdrs>
    SetHandler perl-script
    PerlOptions +ParseHeaders
    PerlResponseHandler TestApache::scanhdrs
</Location>

<Location /TestApache__util>
    SetHandler modperl
    PerlResponseHandler TestApache::util
</Location>

<IfDefine PERL_ITHREADS>
    PerlInterpScope handler
</Ifdefine>
<Location /TestApache__cgihandler>
    SetHandler perl-script
    PerlResponseHandler TestApache::cgihandler
</Location>

<Location /TestError__runtime>
    SetHandler modperl
    PerlResponseHandler TestError::runtime
</Location>

<Location /TestError__syntax>
    SetHandler modperl
    PerlResponseHandler TestError::syntax
</Location>

<Location /TestError__api>
    PerlOptions -GlobalRequest
    SetHandler modperl
    PerlResponseHandler TestError::api
</Location>

<Location /TestCompat__request_body>
    PerlOptions +GlobalRequest
    SetHandler modperl
    PerlResponseHandler TestCompat::request_body
</Location>

<Location /TestCompat__apache_file>
    PerlOptions +GlobalRequest
    SetHandler modperl
    PerlResponseHandler TestCompat::apache_file
</Location>

<Location /TestCompat__apache_util>
    PerlOptions +GlobalRequest
    SetHandler modperl
    PerlResponseHandler TestCompat::apache_util
</Location>

<Location /TestCompat__conn_authen>
    require valid-user
    AuthType Basic
    AuthName simple
    SetHandler modperl
    PerlOptions +GlobalRequest
    PerlAuthenHandler TestCompat::conn_authen
    PerlResponseHandler Apache::TestHandler::ok1
</Location>

<Location /TestCompat__request>
    SetHandler modperl
    PerlResponseHandler TestCompat::request
</Location>

<Location /TestCompat__apache_uri>
    SetHandler modperl
    PerlResponseHandler TestCompat::apache_uri
</Location>

<Location /TestCompat__send_fd>
    SetHandler modperl
    PerlResponseHandler TestCompat::send_fd
</Location>

<Location /TestCompat__apache_table>
    SetHandler modperl
    PerlResponseHandler TestCompat::apache_table
</Location>

<Location /TestCompat__conn_rec>
    SetHandler modperl
    PerlResponseHandler TestCompat::conn_rec
</Location>

# so we can test whether send_httpd_header() works fine
<Location /TestCompat__apache>
    PerlOptions +ParseHeaders
    SetHandler modperl
    PerlResponseHandler TestCompat::apache
</Location>

Listen localhost:8533
<VirtualHost _default_:8533>
    ServerName localhost:8533
    DocumentRoot /usr/home/kiki/work/mod_perl-1.99_13/t/htdocs/vhost
    
    <IfDefine PERL_USEITHREADS>
        # a new interpreter pool
        PerlOptions +Parent
    </IfDefine>
    
    # use test system's @INC
    PerlSwitches -I/usr/home/kiki/work/mod_perl-1.99_13/t
    
    # mp2 modules
    PerlRequire "/usr/home/kiki/work/mod_perl-1.99_13/t/conf/modperl_inc.pl"
    
    # private to this vhost stuff
    PerlRequire "/usr/home/kiki/work/mod_perl-1.99_13/t/htdocs/vhost/startup.pl"
    
    # <Location /TestVhost__config> container is added via add_config
    # in t/htdocs/vhost/startup.pl
</VirtualHost>

PerlModule TestPerl::hash_attack
# call twice to verify an access to the same hash value after the rehash
<Location /TestPerl__hash_attack>
    PerlInitHandler TestPerl::hash_attack::init
    PerlFixupHandler TestPerl::hash_attack::fixup TestPerl::hash_attack::fixup
    SetHandler modperl
    PerlResponseHandler TestPerl::hash_attack
</Location>

<Location /TestPerl__api>
    SetHandler modperl
    PerlResponseHandler TestPerl::api
</Location>

Listen localhost:8534
<VirtualHost _default_:8534>
    PerlProcessConnectionHandler TestProtocol::echo_filter
</VirtualHost>

Listen localhost:8535
<VirtualHost _default_:8535>
    PerlProcessConnectionHandler TestProtocol::echo
</VirtualHost>

Listen localhost:8536
<VirtualHost _default_:8536>
    ServerName localhost:8536
    PerlPreConnectionHandler TestPreConnection::note
    
    <Location /TestPreConnection__note>
        SetHandler modperl
        PerlResponseHandler TestPreConnection::note::response
    </Location>
</VirtualHost>

<Location /TestHooks__set_handlers>
    PerlHeaderParserHandler TestHooks::set_handlers
</Location>

<Location /TestHooks__cleanup2>
    SetHandler modperl
    PerlResponseHandler TestHooks::cleanup2
</Location>

PerlModule      TestHooks::init
PerlInitHandler TestHooks::init::first
<Location /TestHooks__init>
    PerlInitHandler TestHooks::init::second
    PerlResponseHandler TestHooks::init
    PerlResponseHandler TestHooks::init::response
    SetHandler modperl
</Location>

PerlModule TestHooks::access
<Location /TestHooks__access>
    PerlAccessHandler   TestHooks::access
    PerlInitHandler     TestHooks::access::init
    PerlFixupHandler    TestHooks::access::fixup
    PerlResponseHandler Apache::TestHandler::ok1
    SetHandler modperl
</Location>
#<Location />
#    PerlAccessHandler TestHooks::access
#</Location>

<Location /TestHooks__fixup>
    PerlResponseHandler TestHooks::fixup::response
    SetHandler modperl
    PerlFixupHandler TestHooks::fixup
</Location>

<Location /TestHooks__push_handlers>
    SetHandler modperl
    PerlHeaderParserHandler TestHooks::push_handlers
    PerlResponseHandler     TestHooks::push_handlers::conf
    PerlResponseHandler     TestHooks::push_handlers::conf1 TestHooks::push_handlers::conf2
</Location>

PerlTransHandler TestHooks::trans
<Location /TestHooks__trans>
    PerlResponseHandler Apache::TestHandler::ok1
    SetHandler modperl
</Location>

<Location /TestHooks__cleanup>
    SetHandler modperl
    PerlCleanupHandler  TestHooks::cleanup::cleanup1
    PerlResponseHandler TestHooks::cleanup
</Location>

<Location /TestHooks__stacked_handlers>
    SetHandler modperl
    PerlHeaderParserHandler TestHooks::stacked_handlers
</Location>

# create a new virtual host so we can test (almost all) all the hooks
Listen localhost:8537
<VirtualHost _default_:8537>
    ServerName localhost:8537
    
    PerlModule TestHooks::stacked_handlers2
    
    # all 2 run
    PerlPostReadRequestHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::ok
    
    # 1 run, 1 left behind
    PerlTransHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::server_error
    
    # 1 run, 1 left behind
    PerlMapToStorageHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::server_error
    
    <Location /TestHooks__stacked_handlers2>
        # all 4 run
        PerlHeaderParserHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::declined
        PerlHeaderParserHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2::ok
        
        # all 2 run
        PerlAccessHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::ok 
        
        # 2 run, 1 left behind
        PerlAuthenHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2::ok 
        PerlAuthenHandler TestHooks::stacked_handlers2::auth_required
        
        # 2 run, 1 left behind
        PerlAuthzHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2::ok 
        PerlAuthzHandler TestHooks::stacked_handlers2::auth_required
        
        # 1 run, 1 left behind
        PerlTypeHandler  TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers3::server_error
        
        # all 2 run
        PerlFixupHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::ok
        
        # 2 run, 2 left behind
        PerlResponseHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2 
        PerlResponseHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::server_error
        
        SetHandler modperl
        AuthType Basic
        Require valid-user
        
        PerlOutputFilterHandler TestHooks::stacked_handlers2::passthru TestHooks::stacked_handlers2::filter
    </Location>
    
</VirtualHost>

<Location /TestHooks__headerparser>
    PerlOptions +SetupEnv
    PerlResponseHandler TestHooks::headerparser::response
    SetHandler modperl
    PerlHeaderparserHandler TestHooks::headerparser
</Location>

PerlModule TestHooks::authz
<Location /TestHooks__authz>
    require user dougm
    AuthType Basic
    AuthName simple
    PerlAuthenHandler TestHooks::authz::auth_any
    PerlResponseHandler Apache::TestHandler::ok1
    SetHandler modperl
    PerlAuthzHandler TestHooks::authz
</Location>

Listen localhost:8538
<VirtualHost _default_:8538>
    ServerName localhost:8538
    PerlSetVar PostConfig VHost
    PerlModule TestHooks::startup
    PerlPostConfigHandler TestHooks::startup::post_config
    PerlOpenLogsHandler   TestHooks::startup::open_logs
    <Location /TestHooks__startup>
        SetHandler modperl
        PerlResponseHandler TestHooks::startup
    </Location>
</VirtualHost>
PerlSetVar PostConfig Main
PerlModule TestHooks::startup
PerlPostConfigHandler TestHooks::startup::post_config
PerlOpenLogsHandler   TestHooks::startup::open_logs
<Location /TestHooks__startup>
    SetHandler modperl
    PerlResponseHandler TestHooks::startup
</Location>

<Location /TestHooks__push_handlers_same_phase>
    SetHandler modperl
    PerlResponseHandler TestHooks::push_handlers_same_phase
</Location>

<Location /TestHooks__push_handlers_blessed>
    SetHandler modperl
    PerlResponseHandler TestHooks::push_handlers_blessed
</Location>

<Location /TestHooks__authen>
    require valid-user
    AuthType Basic
    AuthName simple
    PerlResponseHandler Apache::TestHandler::ok1
    SetHandler modperl
    PerlAuthenHandler TestHooks::authen
</Location>

PerlModule TestFilter::in_error
<Location /TestFilter__in_error>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_error::response
    PerlInputFilterHandler TestFilter::in_error
</Location>

PerlModule TestFilter::out_init_basic
<Location /TestFilter__out_init_basic>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_init_basic::response
    PerlOutputFilterHandler TestFilter::out_init_basic::transparent
</Location>

Listen localhost:8539
<VirtualHost _default_:8539>
    ServerName localhost:8539
    PerlModule TestFilter::in_bbs_inject_header
    PerlInputFilterHandler TestFilter::in_bbs_inject_header
    <Location /TestFilter__in_bbs_inject_header>
        SetHandler modperl
        PerlResponseHandler TestFilter::in_bbs_inject_header::response
    </Location>
</VirtualHost>

PerlModule TestFilter::out_str_remove
<Location /TestFilter__out_str_remove>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_str_remove::response
    PerlOutputFilterHandler TestFilter::out_str_remove::insert_underscores
    PerlOutputFilterHandler TestFilter::out_str_remove::upcase_n_remove
</Location>

PerlModule TestFilter::out_str_subreq_modperl
<Location /modperl_subrequest>
    SetHandler modperl
    PerlResponseHandler   TestFilter::out_str_subreq_modperl::subrequest
</Location>
<Location /TestFilter__out_str_subreq_modperl>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_str_subreq_modperl::response
    PerlOutputFilterHandler TestFilter::out_str_subreq_modperl::include
</Location>

PerlModule TestFilter::out_str_declined
<Location /TestFilter__out_str_declined>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_str_declined::response
    PerlOutputFilterHandler TestFilter::out_str_declined::decline
    PerlOutputFilterHandler TestFilter::out_str_declined::black_hole
</Location>

PerlModule TestFilter::in_bbs_underrun
#PerlInputFilterHandler ModPerl::TestFilterDebug::snoop_request
<Location /TestFilter__in_bbs_underrun>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_bbs_underrun::response
    PerlInputFilterHandler TestFilter::in_bbs_underrun::handler
</Location>

PerlModule TestFilter::out_str_subreq_default
Alias /default_subrequest /usr/home/kiki/work/mod_perl-1.99_13/t/htdocs/filter
<Location /default_subrequest>
    SetHandler default-handler
</Location>
<Location /TestFilter__out_str_subreq_default>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_str_subreq_default::response
    PerlOutputFilterHandler TestFilter::out_str_subreq_default::include
</Location>

PerlModule TestFilter::out_str_req_eos
<Location /TestFilter__out_str_req_eos>
    SetHandler modperl
    PerlResponseHandler     TestFilter::out_str_req_eos
    PerlOutputFilterHandler TestFilter::out_str_req_eos::add_prefix
    PerlOutputFilterHandler TestFilter::out_str_req_eos::add_suffix
</Location>

PerlModule TestFilter::out_bbs_ctx
<Location /TestFilter__out_bbs_ctx>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_bbs_ctx::response
    PerlOutputFilterHandler TestFilter::out_bbs_ctx
</Location>

PerlModule TestFilter::out_str_api
<Location /TestFilter__out_str_api>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_str_api::response
    PerlOutputFilterHandler TestFilter::out_str_api
</Location>

PerlModule TestFilter::in_bbs_body
<Location /TestFilter__in_bbs_body>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_bbs_body::response
    PerlInputFilterHandler TestFilter::in_bbs_body
</Location>

PerlModule TestFilter::in_str_consume
#PerlInputFilterHandler  ModPerl::TestFilterDebug::snoop_request
#PerlInputFilterHandler  ModPerl::TestFilterDebug::snoop_request
<Location /TestFilter__in_str_consume>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_str_consume::response
    PerlInputFilterHandler TestFilter::in_str_consume::handler
</Location>

PerlModule TestFilter::out_str_reverse
<LocationMatch "/filter/reverse.txt">
    PerlOutputFilterHandler TestFilter::out_str_reverse
</LocationMatch>
<Location /TestFilter__out_str_reverse>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_str_reverse::response
    PerlOutputFilterHandler TestFilter::out_str_reverse
</Location>

PerlModule TestFilter::out_str_ctx
<Location /TestFilter__out_str_ctx>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_str_ctx::response
    PerlOutputFilterHandler TestFilter::out_str_ctx
</Location>

PerlModule TestFilter::in_str_sandwich
<Location /TestFilter__in_str_sandwich>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_str_sandwich::response
    PerlInputFilterHandler TestFilter::in_str_sandwich
</Location>

PerlModule TestFilter::in_init_basic
<Location /TestFilter__in_init_basic>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_init_basic::response
    PerlInputFilterHandler TestFilter::in_init_basic::suicide
    PerlInputFilterHandler TestFilter::in_init_basic::transparent
</Location>

PerlModule TestFilter::out_str_req_mix
<Location /TestFilter__out_str_req_mix>
    Options +Includes
    PerlOutputFilterHandler TestFilter::out_str_req_mix::adjust
    PerlSetOutputFilter INCLUDES
    PerlOutputFilterHandler TestFilter::out_str_req_mix::adjust
    SetHandler modperl
    PerlResponseHandler     TestFilter::out_str_req_mix
</Location>

PerlModule TestFilter::out_bbs_basic
<Location /TestFilter__out_bbs_basic>
    SetHandler modperl
    PerlResponseHandler TestFilter::out_bbs_basic::response
    PerlOutputFilterHandler TestFilter::out_bbs_basic
</Location>

PerlModule TestFilter::in_str_lc
<Location /TestFilter__in_str_lc>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_str_lc::response
    PerlInputFilterHandler TestFilter::in_str_lc
</Location>

PerlModule TestFilter::both_str_req_mix
<Location /TestFilter__both_str_req_mix>
    Options +Includes
    
    # DEFLATE has a higher priority (AP_FTYPE_CONTENT_SET=20) than
    # mod_perl request filters (AP_FTYPE_RESOURCE=10), so it's going
    # to filter input first no matter how we insert other mod_perl
    # filters. (mod_perl connection filter handlers have an even
    # higher priority (AP_FTYPE_PROTOCOL = 30), see
    # include/util_filter.h for those definitions).
    #
    # PerlSetInputFilter is only useful for preserving the
    # insertion order of filters with the same priority
    SetInputFilter     DEFLATE
    #PerlInputFilterHandler ModPerl::TestFilterDebug::snoop_request
    PerlInputFilterHandler TestFilter::both_str_req_mix::in_adjust
    PerlInputFilterHandler TestFilter::both_str_req_mix::transparent
    
    # here INCLUDES and adjust are both of the same priority
    # (AP_FTYPE_RESOURCE), so PerlSetOutputFilter
    PerlOutputFilterHandler TestFilter::both_str_req_mix::out_adjust_before_ssi
    PerlSetOutputFilter INCLUDES
    PerlOutputFilterHandler TestFilter::both_str_req_mix::out_adjust_after_ssi
    #PerlOutputFilterHandler ModPerl::TestFilterDebug::snoop_request
    PerlSetOutputFilter DEFLATE
    
    SetHandler modperl
    PerlResponseHandler     TestFilter::both_str_req_mix
</Location>

<Location /TestFilter__in_autoload>
    SetHandler modperl
    PerlResponseHandler    ModPerl::Test::pass_through_response_handler
    # no PerlModule TestFilter::in_load on purpose
    PerlInputFilterHandler TestFilter::in_autoload
</Location>

Listen localhost:8540
<VirtualHost _default_:8540>
    ServerName localhost:8540
    PerlModule TestFilter::in_str_msg
    PerlInputFilterHandler TestFilter::in_str_msg
    
    <Location /TestFilter__in_str_msg>
        SetHandler modperl
        PerlResponseHandler TestFilter::in_str_msg::response
    </Location>
    
</Virtualhost>
<Location /TestFilter__in_str_msg>
    PerlInputFilterHandler TestFilter::in_str_msg
</Location>

PerlModule TestFilter::both_str_req_add
<Location /TestFilter__both_str_req_add>
    SetHandler modperl
    PerlHeaderParserHandler TestFilter::both_str_req_add::header_parser
    PerlResponseHandler     TestFilter::both_str_req_add
</Location>

Listen localhost:8541
<VirtualHost _default_:8541>
    ServerName localhost:8541
    PerlModule                   TestFilter::both_str_con_add
    PerlPreConnectionHandler     TestFilter::both_str_con_add::pre_connection
    PerlProcessConnectionHandler TestFilter::both_str_con_add
</VirtualHost>

<IfModule mod_proxy.c>
    <Proxy http://localhost:8529/*>
        <IfModule mod_access.c>
            Order Deny,Allow
            Deny from all
            Allow from localhost
        </IfModule>
    </Proxy>
    
    ProxyRequests Off
    RewriteEngine On
    
    ProxyPass    /TestFilter__both_str_req_proxy/ \
    http://localhost:8529/TestFilter__both_str_req_proxy_content/
    ProxyPassReverse /TestFilter__both_str_req_proxy/ \
    http://localhost:8529/TestFilter__both_str_req_proxy_content/
</IfModule>

PerlModule TestFilter::both_str_req_proxy
<Location /TestFilter__both_str_req_proxy>
    PerlInputFilterHandler  TestFilter::both_str_req_proxy::in_filter
    PerlOutputFilterHandler TestFilter::both_str_req_proxy::out_filter
</Location>
<Location /TestFilter__both_str_req_proxy_content>
    SetHandler modperl
    PerlResponseHandler     TestFilter::both_str_req_proxy
</Location>

Listen localhost:8542
<VirtualHost _default_:8542>
    ServerName localhost:8542
    PerlModule TestFilter::in_bbs_msg
    PerlInputFilterHandler TestFilter::in_bbs_msg
    
    <Location /TestFilter__in_bbs_msg>
        SetHandler modperl
        PerlResponseHandler TestFilter::in_bbs_msg::response
    </Location>
    
</VirtualHost>

PerlModule TestFilter::in_bbs_consume
<Location /TestFilter__in_bbs_consume>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_bbs_consume::response
    PerlInputFilterHandler TestFilter::in_bbs_consume
</Location>

<Location /top_dir>
    PerlOutputFilterHandler TestFilter::out_str_lc
</Location>
Alias /top_dir /usr/home/kiki/work/mod_perl-1.99_13
<Location /TestFilter__out_str_lc>
    PerlOutputFilterHandler TestFilter::out_str_lc
</Location>

PerlModule TestFilter::in_str_declined
<Location /TestFilter__in_str_declined>
    SetHandler modperl
    PerlResponseHandler TestFilter::in_str_declined::response
    PerlInputFilterHandler TestFilter::in_str_declined
</Location>

# APACHE_TEST_CONFIG_ORDER 940
PerlSwitches -I/usr/home/kiki/work/mod_perl-1.99_13/t/htdocs/testdirective/perlmodule-vh
Listen localhost:8543
<VirtualHost _default_:8543>
    ServerName localhost:8543
    PerlModule ApacheTest::PerlModuleTest
    
    <Location /TestDirective__perlmodule>
        SetHandler modperl
        PerlResponseHandler TestDirective::perlmodule
    </Location>
    
</Virtualhost>
<Location /TestDirective__perlmodule>
    SetHandler modperl
    PerlResponseHandler TestDirective::perlmodule
</Location>

# APACHE_TEST_CONFIG_ORDER 940
PerlSwitches -I/usr/home/kiki/work/mod_perl-1.99_13/t/htdocs/testdirective/main
PerlRequire "ApacheTest/PerlRequireTest.pm"
Listen localhost:8544
<VirtualHost _default_:8544>
    ServerName localhost:8544
    
    <IfDefine PERL_USEITHREADS>
        # a new interpreter pool
        PerlOptions +Parent
    </IfDefine>
    
    # use test system's @INC
    PerlSwitches -I/usr/home/kiki/work/mod_perl-1.99_13/t
    PerlRequire "conf/modperl_inc.pl"
    PerlModule Apache2
    
    PerlSwitches -I/usr/home/kiki/work/mod_perl-1.99_13/t/htdocs/testdirective/vh
    PerlRequire "ApacheTest/PerlRequireTest.pm"
    
    <Location /TestDirective__perlrequire>
        SetHandler modperl
        PerlResponseHandler TestDirective::perlrequire
    </Location>
    
</Virtualhost>
<Location /TestDirective__perlrequire>
    SetHandler modperl
    PerlResponseHandler TestDirective::perlrequire
</Location>

# APACHE_TEST_CONFIG_ORDER 941
Listen localhost:8545
<VirtualHost _default_:8545>
    ServerName localhost:8545
    
    <IfDefine PERL_USEITHREADS>
        # a new interpreter pool
        PerlOptions +Parent
    </IfDefine>
    
    # use test system's @INC
    PerlSwitches -I/usr/home/kiki/work/mod_perl-1.99_13/t
    PerlRequire "conf/modperl_inc.pl"
    PerlModule Apache2
    
    <Location /TestPerl__ithreads>
        SetHandler modperl
        PerlResponseHandler TestPerl::ithreads
    </Location>
    
</Virtualhost>
<Location /TestPerl__ithreads>
    SetHandler modperl
    PerlResponseHandler TestPerl::ithreads
</Location>

# APACHE_TEST_CONFIG_ORDER 950
PerlLoadModule TestDirective::perlloadmodule4
Listen localhost:8546
<VirtualHost _default_:8546>
    ServerName localhost:8546
    # here perlloadmodule sets scfg on behalf of the base server
    MyTest4 "Vhost"
    <Location /TestDirective__perlloadmodule4>
        MyTest4 "Dir"
        SetHandler modperl
        PerlResponseHandler TestDirective::perlloadmodule4
    </Location>
</Virtualhost>
<Location /TestDirective__perlloadmodule4>
    SetHandler modperl
    PerlResponseHandler TestDirective::perlloadmodule4
</Location>

# APACHE_TEST_CONFIG_ORDER 950
PerlLoadModule TestDirective::perlloadmodule2

MyMergeTest one two
<Location /TestDirective__perlloadmodule2>
    MyMergeTest three four
</Location>
<Location /TestDirective__perlloadmodule2/subdir>
    MyMergeTest five
    MyMergeTest six
</Location>
<Location /TestDirective__perlloadmodule2>
    SetHandler modperl
    PerlResponseHandler TestDirective::perlloadmodule2
</Location>

# APACHE_TEST_CONFIG_ORDER 950
PerlLoadModule TestDirective::perlloadmodule

MyTest one two
ServerTest per-server
<Location /TestDirective__perlloadmodule>
    MyOtherTest value
    SetHandler modperl
    PerlResponseHandler TestDirective::perlloadmodule
</Location>

# APACHE_TEST_CONFIG_ORDER 950
PerlLoadModule TestDirective::perlloadmodule5
Listen localhost:8547
<VirtualHost _default_:8547>
    ServerName localhost:8547
    # here mod_perl sets the scfg by itself for this vhost
    PerlModule File::Spec
    MyTest5 "Vhost"
    <Location /TestDirective__perlloadmodule5>
        MyTest5 "Dir"
        SetHandler modperl
        PerlResponseHandler TestDirective::perlloadmodule5
    </Location>
</Virtualhost>
<Location /TestDirective__perlloadmodule5>
    SetHandler modperl
    PerlResponseHandler TestDirective::perlloadmodule5
</Location>

# APACHE_TEST_CONFIG_ORDER 950
PerlLoadModule TestDirective::perlloadmodule3
MyPlus 5
MyList     "MainServer"
MyAppend   "MainServer"
MyOverride "MainServer"
Listen localhost:8548
<VirtualHost _default_:8548>
    ServerName localhost:8548
    MyPlus 2
    MyList     "VHost"
    MyAppend   "VHost"
    MyOverride "VHost"
    <Location /TestDirective__perlloadmodule3>
        MyPlus 3
        MyList     "Dir"
        MyAppend   "Dir"
        MyOverride "Dir"
        SetHandler modperl
        PerlResponseHandler TestDirective::perlloadmodule3
    </Location>
    <Location /TestDirective__perlloadmodule3/subdir>
        MyPlus 1
        MyList     "SubDir"
        MyAppend   "SubDir"
        MyOverride "SubDir"
    </Location>
</Virtualhost>
<Location /TestDirective__perlloadmodule3>
    SetHandler modperl
    PerlResponseHandler TestDirective::perlloadmodule3
</Location>

# XXX: we want to have this configuration section to come first
# amongst other perlloadmodule tests (<950), so we can test how
# mod_perl starts from vhost. but currently we can't because
# PerlSwitches from other tests are ignored, so the test suite fails
# to startup.
#
# tmp solution: ensure that it's configured *after* all other
# perlloadmodule tests
#
# APACHE_TEST_CONFIG_ORDER 951
Listen localhost:8549
<VirtualHost _default_:8549>
    ServerName localhost:8549
    PerlLoadModule TestDirective::perlloadmodule6
    MyTest6 "Vhost"
    <Location /TestDirective__perlloadmodule6>
        MyTest6 "Dir"
        SetHandler modperl
        PerlResponseHandler TestDirective::perlloadmodule6
    </Location>
</Virtualhost>
<Location /TestDirective__perlloadmodule6>
    SetHandler modperl
    PerlResponseHandler TestDirective::perlloadmodule6
</Location>


Include "/usr/home/kiki/work/mod_perl-1.99_13/t/conf/extra.last.conf"

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: [mp2] Segmentation fault when starting Apache with mod_perl [Apache 2.0.49 / Perl 5.8.2 / mod_perl 1.99_13]

Posted by Stas Bekman <st...@stason.org>.
Kiki wrote:

> OK, I tried 1.99_13 with the same results. The build environment is the
> same as for 1.99_12 so I guess the same Bug Report Info applies here too (I
> can generate another bug report if you need it though)

No, no, that's fine. Hmm, I don't remember seeing mach reports before. Is that 
Mach OS: http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/mach.html?

I think I've seen a similar trace with some older BSD variant (i think it was 
openbsd 2.9), but I don't know enough to solve it :(

>> We are not aware of this problem, Kiki. You need to give us more matter
>> to be able to understand your problem. You don't have a problem to start
>> the modperl > test suite, do you?
> 
> 
> In fact any attempt to start apache with mod_perl (including the one in the
> test suite) causes a segmentation fault.

OK. Any chance you can try building perl with ithreads and then rebuild 
mod_perl, and try again? It's a known problem with FreeBSD (which MachOS seems 
to be a variant of?):

modperl-2.0/todo/bugs_build:
...
FreeBSD ??  DSO Works with non-threaded perl (4.8-RELEASE and
                 5.1-RELEASE)
 
http://marc.theaimsgroup.com/?l=apache-modperl&m=106399870822612&w=2
                 It doesn't work with threaded perl/worker mpm,
                 seemingly because of the problems with threads on
                 FreeBSD (not sure what version).

In any case please build perl with debug enabled, since your backtrace doesn't 
show the arguments to the commands:
#0  0x290304f7 in Perl_newSVpvn ()
    from /usr/local/lib/perl5/5.8.2/mach/CORE/libperl.so
Here is how:
http://perl.apache.org/docs/2.0/user/help/help.html#Resolving_Segmentation_Faults

This part hints that there could be a problem with perlio.
#1  0x29081219 in PerlIO_open ()
    from /usr/local/lib/perl5/5.8.2/mach/CORE/libperl.so
So it's possible that you will need to build perl w/o perlio. But first pleae 
just try to disable threads.

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org