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);