Bill Stoddard wrote:
Just committed a fix (please test) to Apache HTTPD 2.1. Patch is here (it should apply to 2.0):
http://cvs.apache.org/viewcvs.cgi/httpd-2.0/server/mpm/winnt/child.c?r1=1.32&r2=1.33
Brilliant! That's fixed it straight away -- the mp2 1.99_13 test suite with all 21 Listen's but only 20 ThreadsPerChild now runs perfectly.
(Actually, it works fine with only 1 ThreadsPerChild now!!!)
It still says it only started 20 threads, though (in error_log). Is that correct? I thought the plan was to bump ThreadsPerChild up, so I was expecting to see an extra thread started. Or is it that ThreadsPerChild threads are still created initially, and up to num_listeners extra threads can now be created later if required.
Perhaps a documentation change would be in order too, to mention the effect that the number of listeners now has on ThreadsPerChild?
Can this entry appear at the end of httpd.conf?
<IfModule mpm_winnt.c>
ThreadsPerChild 20
MaxRequestsPerChild 0
</IfModule>if so, this patch should do the right thing. If not, a big rewrite will be required as at the moment we don't know the number of listeners when the top of httpd.conf is written.
Index: lib/Apache/TestConfig.pm
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
retrieving revision 1.213
diff -u -r1.213 TestConfig.pm
--- lib/Apache/TestConfig.pm 4 Mar 2004 05:51:31 -0000 1.213
+++ lib/Apache/TestConfig.pm 10 Mar 2004 18:57:07 -0000
@@ -973,6 +973,13 @@
$self->server->version_of(\%servername_config)->(@_);
}
+my $vhost_listeners = 0;
+sub vhost_listeners {
+ my($self, $increment) = @_;
+ $vhost_listeners++ if $increment;
+ $vhost_listeners;
+}
+
sub parse_vhost {
my($self, $line) = @_;@@ -1019,6 +1026,8 @@
#extra config that should go *outside* the <VirtualHost ...>
@out_config = ([Listen => $vars->{servername} . ':' . $port]);+ $self->vhost_listeners(1);
+
if ($self->{vhosts}->{$module}->{namebased}) {
push @out_config => [NameVirtualHost => "*:$port"];
}
@@ -1395,6 +1404,20 @@$self->postamble_run($out);
+ # Apache2 (< 2.0.50) winnt mpm requires at least as many threads
+ # as the number of listeners, which we don't know until all config
+ # hooks were called, so only at this point we can write ThreadsPerChild
+ if ($self->server->{rev} == 2 && $self->{mpm} eq 'winnt') {
+ my $threads = $self->{vars}->{maxclients} + $self->vhost_listeners();
+ print $out <<EOI;
+<IfModule mpm_winnt.c>
+ ThreadsPerChild $threads
+ MaxRequestsPerChild 0
+</IfModule>
+
+EOI
+ }
+
print $out join "\n", @very_last_postamble; close $in;
@@ -1840,10 +1863,7 @@
MaxRequestsPerChild 0
</IfDefine>-<IfModule mpm_winnt.c> - ThreadsPerChild 20 - MaxRequestsPerChild 0 -</IfModule> +
<Location /server-info>
SetHandler server-info
Index: lib/Apache/TestConfigPerl.pm
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfigPerl.pm,v
retrieving revision 1.84
diff -u -r1.84 TestConfigPerl.pm
--- lib/Apache/TestConfigPerl.pm 4 Mar 2004 05:51:31 -0000 1.84
+++ lib/Apache/TestConfigPerl.pm 10 Mar 2004 18:57:07 -0000
@@ -222,6 +222,7 @@
my($self, $module, $args) = @_;
my $port = $self->new_vhost($module);
my $vars = $self->{vars};
+ $self->vhost_listeners(1);
$self->postamble(Listen => $vars->{servername} . ':' . $port);
}
-- __________________________________________________________________ Stas Bekman JAm_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
-- Report problems: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html List etiquette: http://perl.apache.org/maillist/email-etiquette.html
