You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2017/06/27 14:28:50 UTC
svn commit: r1800066 - in /httpd/test/framework/trunk: Misc.pm
t/modules/proxy_fcgi.t
Author: jim
Date: Tue Jun 27 14:28:50 2017
New Revision: 1800066
URL: http://svn.apache.org/viewvc?rev=1800066&view=rev
Log:
Re-use the runner sub function...
Modified:
httpd/test/framework/trunk/Misc.pm
httpd/test/framework/trunk/t/modules/proxy_fcgi.t
Modified: httpd/test/framework/trunk/Misc.pm
URL: http://svn.apache.org/viewvc/httpd/test/framework/trunk/Misc.pm?rev=1800066&r1=1800065&r2=1800066&view=diff
==============================================================================
--- httpd/test/framework/trunk/Misc.pm (original)
+++ httpd/test/framework/trunk/Misc.pm Tue Jun 27 14:28:50 2017
@@ -28,7 +28,7 @@ BEGIN {
# Just a bunch of useful subs
}
-sub do_do_run_run ($$)
+sub do_do_run_run
{
my $msg = shift;
my $func = shift;
@@ -43,7 +43,7 @@ sub do_do_run_run ($$)
if ($pid == 0) {
print WRITE_END 'x';
close WRITE_END;
- $func->();
+ $func->(@_);
exit;
}
# give time for the system call to take effect
@@ -53,6 +53,7 @@ sub do_do_run_run ($$)
kill 'TERM', $pid;
exit;
}
+ return $pid;
}
Modified: httpd/test/framework/trunk/t/modules/proxy_fcgi.t
URL: http://svn.apache.org/viewvc/httpd/test/framework/trunk/t/modules/proxy_fcgi.t?rev=1800066&r1=1800065&r2=1800066&view=diff
==============================================================================
--- httpd/test/framework/trunk/t/modules/proxy_fcgi.t (original)
+++ httpd/test/framework/trunk/t/modules/proxy_fcgi.t Tue Jun 27 14:28:50 2017
@@ -5,6 +5,8 @@ use Apache::Test;
use Apache::TestRequest;
use Apache::TestUtil;
+use Misc;
+
my $have_fcgisetenvif = have_min_apache_version('2.4.26');
my $have_fcgibackendtype = have_min_apache_version('2.4.26');
@@ -24,60 +26,32 @@ Apache::TestRequest::module("proxy_fcgi"
# Launches a short-lived FCGI daemon that will handle exactly one request with
# the given handler function. Returns the child PID; exits on failure.
-sub run_fcgi_handler($$)
+
+sub fcgi_request
{
my $fcgi_port = shift;
my $handler_func = shift;
- # Use a pipe for ready-signalling between the child and parent. Much faster
- # (and more reliable) than just sleeping for a few seconds.
- pipe(READ_END, WRITE_END);
- my $pid = fork();
-
- unless (defined $pid) {
- t_debug "couldn't fork FCGI process";
- ok 0;
- exit;
- }
+ # Child process. Open up a listening socket.
+ my $sock = FCGI::OpenSocket(":$fcgi_port", 10);
- if ($pid == 0) {
- # Child process. Open up a listening socket.
- my $sock = FCGI::OpenSocket(":$fcgi_port", 10);
-
- # Signal the parent process that we're ready.
- print WRITE_END 'x';
- close WRITE_END;
-
- # Listen for and respond to exactly one request from the client.
- my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV,
- $sock, &FCGI::FAIL_ACCEPT_ON_INTR);
-
- if ($request->Accept() == 0) {
- # Run the handler.
- $handler_func->();
- $request->Finish();
- }
-
- # Clean up and exit.
- FCGI::CloseSocket($sock);
- exit;
+ # Listen for and respond to exactly one request from the client.
+ my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV,
+ $sock, &FCGI::FAIL_ACCEPT_ON_INTR);
+
+ if ($request->Accept() == 0) {
+ # Run the handler.
+ $handler_func->(@_);
+ $request->Finish();
}
- # Parent process. Wait for the daemon to launch.
- unless (IO::Select->new((\*READ_END,))->can_read(2)) {
- t_debug "timed out waiting for FCGI process to start";
- ok 0;
-
- kill 'TERM', $pid;
- # Note that we don't waitpid() here because Perl's fork() implementation
- # on some platforms (Windows) doesn't guarantee that the pseudo-TERM
- # signal will be delivered. Just wait for the child to be cleaned up
- # when we exit.
-
- exit;
- }
+ # Clean up and exit.
+ FCGI::CloseSocket($sock);
+}
- return $pid;
+sub run_fcgi_handler
+{
+ return Misc::do_do_run_run("FCGI process", \&fcgi_request, @_);
}
# Convenience wrapper for run_fcgi_handler() that will echo back the envvars in
Re: svn commit: r1800066 - in /httpd/test/framework/trunk: Misc.pm
t/modules/proxy_fcgi.t
Posted by Jacob Champion <ch...@gmail.com>.
On 06/27/2017 07:28 AM, jim@apache.org wrote:
> Author: jim
> Date: Tue Jun 27 14:28:50 2017
> New Revision: 1800066
>
> URL: http://svn.apache.org/viewvc?rev=1800066&view=rev
> Log:
> Re-use the runner sub function...
>
> Modified:
> httpd/test/framework/trunk/Misc.pm
> httpd/test/framework/trunk/t/modules/proxy_fcgi.t
>
> Modified: httpd/test/framework/trunk/Misc.pm
> URL: http://svn.apache.org/viewvc/httpd/test/framework/trunk/Misc.pm?rev=1800066&r1=1800065&r2=1800066&view=diff
> ==============================================================================
> --- httpd/test/framework/trunk/Misc.pm (original)
> +++ httpd/test/framework/trunk/Misc.pm Tue Jun 27 14:28:50 2017
> @@ -28,7 +28,7 @@ BEGIN {
> # Just a bunch of useful subs
> }
>
> -sub do_do_run_run ($$)
> +sub do_do_run_run
> {
> my $msg = shift;
> my $func = shift;
> @@ -43,7 +43,7 @@ sub do_do_run_run ($$)
> if ($pid == 0) {
> print WRITE_END 'x';
> close WRITE_END;
> - $func->();
> + $func->(@_);
> exit;
> }
> # give time for the system call to take effect
> @@ -53,6 +53,7 @@ sub do_do_run_run ($$)
> kill 'TERM', $pid;
> exit;
> }
> + return $pid;
> }
>
>
>
> Modified: httpd/test/framework/trunk/t/modules/proxy_fcgi.t
> URL: http://svn.apache.org/viewvc/httpd/test/framework/trunk/t/modules/proxy_fcgi.t?rev=1800066&r1=1800065&r2=1800066&view=diff
> ==============================================================================
> --- httpd/test/framework/trunk/t/modules/proxy_fcgi.t (original)
> +++ httpd/test/framework/trunk/t/modules/proxy_fcgi.t Tue Jun 27 14:28:50 2017
> @@ -5,6 +5,8 @@ use Apache::Test;
> use Apache::TestRequest;
> use Apache::TestUtil;
>
> +use Misc;
> +
> my $have_fcgisetenvif = have_min_apache_version('2.4.26');
> my $have_fcgibackendtype = have_min_apache_version('2.4.26');
>
> @@ -24,60 +26,32 @@ Apache::TestRequest::module("proxy_fcgi"
>
> # Launches a short-lived FCGI daemon that will handle exactly one request with
> # the given handler function. Returns the child PID; exits on failure.
> -sub run_fcgi_handler($$)
> +
> +sub fcgi_request
> {
> my $fcgi_port = shift;
> my $handler_func = shift;
>
> - # Use a pipe for ready-signalling between the child and parent. Much faster
> - # (and more reliable) than just sleeping for a few seconds.
> - pipe(READ_END, WRITE_END);
> - my $pid = fork();
> -
> - unless (defined $pid) {
> - t_debug "couldn't fork FCGI process";
> - ok 0;
> - exit;
> - }
> + # Child process. Open up a listening socket.
> + my $sock = FCGI::OpenSocket(":$fcgi_port", 10);
>
> - if ($pid == 0) {
> - # Child process. Open up a listening socket.
> - my $sock = FCGI::OpenSocket(":$fcgi_port", 10);
> -
> - # Signal the parent process that we're ready.
> - print WRITE_END 'x';
> - close WRITE_END;
This isn't an equivalent transformation. It's important that the socket
is opened *before* signaling the parent; otherwise there's a race and
the parent might try to ping the child before it's ready.
--Jacob