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


Reply via email to