Author: stas Date: Sat Feb 19 08:31:24 2005 New Revision: 154417 URL: http://svn.apache.org/viewcvs?view=rev&rev=154417 Log: Apache::SubProcess::spawn_proc_prog now can be called in a void context, in which case all the communication std pipes will be closed
Modified: perl/modperl/trunk/Changes perl/modperl/trunk/t/response/TestApache/subprocess.pm perl/modperl/trunk/xs/Apache/SubProcess/Apache__SubProcess.h Modified: perl/modperl/trunk/Changes URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?view=diff&r1=154416&r2=154417 ============================================================================== --- perl/modperl/trunk/Changes (original) +++ perl/modperl/trunk/Changes Sat Feb 19 08:31:24 2005 @@ -12,6 +12,10 @@ =item 1.999_22-dev +Apache::SubProcess::spawn_proc_prog now can be called in a void +context, in which case all the communication std pipes will be closed +[Stas] + fix a bug in $r->document_root, which previously weren't copying the new string away [Stas] Modified: perl/modperl/trunk/t/response/TestApache/subprocess.pm URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/t/response/TestApache/subprocess.pm?view=diff&r1=154416&r2=154417 ============================================================================== --- perl/modperl/trunk/t/response/TestApache/subprocess.pm (original) +++ perl/modperl/trunk/t/response/TestApache/subprocess.pm Sat Feb 19 08:31:24 2005 @@ -43,9 +43,19 @@ my $cfg = Apache::Test::config(); my $vars = $cfg->{vars}; - plan $r, tests => 4, need qw(APR::PerlIO Apache::SubProcess); + plan $r, tests => 5, need qw(APR::PerlIO Apache::SubProcess); my $target_dir = catfile $vars->{documentroot}, "util"; + + { + # test: passing argv + void context + my $script = catfile $target_dir, "argv.pl"; + my @argv = qw(foo bar); + $r->spawn_proc_prog($perl, [$script, @argv]); + # can't really test if something is still returned since it + # will be no longer void context + ok 1; + } { # test: passing argv + scalar context Modified: perl/modperl/trunk/xs/Apache/SubProcess/Apache__SubProcess.h URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/Apache/SubProcess/Apache__SubProcess.h?view=diff&r1=154416&r2=154417 ============================================================================== --- perl/modperl/trunk/xs/Apache/SubProcess/Apache__SubProcess.h (original) +++ perl/modperl/trunk/xs/Apache/SubProcess/Apache__SubProcess.h Sat Feb 19 08:31:24 2005 @@ -122,6 +122,12 @@ #define PUSH_FILE_GLOB_WRITE(fp) \ PUSH_FILE_GLOB(fp, MODPERL_APR_PERLIO_HOOK_WRITE) +#define CLOSE_SCRIPT_STD(stream) \ + rc = apr_file_close(stream); \ + if (rc != APR_SUCCESS) { \ + XSRETURN_UNDEF; \ + } + static XS(MPXS_modperl_spawn_proc_prog) { dXSARGS; @@ -180,22 +186,20 @@ apr_file_to_glob = APR_RETRIEVE_OPTIONAL_FN(modperl_apr_perlio_apr_file_to_glob); - if (GIMME_V == G_SCALAR) { + if (GIMME_V == G_VOID) { + CLOSE_SCRIPT_STD(script_in); + CLOSE_SCRIPT_STD(script_out); + CLOSE_SCRIPT_STD(script_err); + XSRETURN_EMPTY; + } + else if (GIMME_V == G_SCALAR) { /* XXX: need to do lots of error checking before * putting the object on the stack */ EXTEND(SP, 1); PUSH_FILE_GLOB_READ(script_out); - - rc = apr_file_close(script_in); - if (rc != APR_SUCCESS) { - XSRETURN_UNDEF; - } - - rc = apr_file_close(script_err); - if (rc != APR_SUCCESS) { - XSRETURN_UNDEF; - } + CLOSE_SCRIPT_STD(script_in); + CLOSE_SCRIPT_STD(script_err); } else { EXTEND(SP, 3);