nlopess Tue Feb 13 19:56:42 2007 UTC
Modified files:
/php-src/ext/standard proc_open.c
/php-src/ext/standard/tests/general_functions bug34794.phpt
Log:
MFB
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/proc_open.c?r1=1.51&r2=1.52&diff_format=u
Index: php-src/ext/standard/proc_open.c
diff -u php-src/ext/standard/proc_open.c:1.51
php-src/ext/standard/proc_open.c:1.52
--- php-src/ext/standard/proc_open.c:1.51 Tue Jan 9 16:27:32 2007
+++ php-src/ext/standard/proc_open.c Tue Feb 13 19:56:42 2007
@@ -15,7 +15,7 @@
| Author: Wez Furlong <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: proc_open.c,v 1.51 2007/01/09 16:27:32 dmitry Exp $ */
+/* $Id: proc_open.c,v 1.52 2007/02/13 19:56:42 nlopess Exp $ */
#if 0 && (defined(__linux__) || defined(sun) || defined(__IRIX__))
# define _BSD_SOURCE /* linux wants this when XOPEN mode is on */
@@ -945,6 +945,10 @@
descriptors[i].mode_flags), mode_string, NULL);
#else
stream =
php_stream_fopen_from_fd(descriptors[i].parentend, mode_string, NULL);
+# if defined(F_SETFD) && defined(FD_CLOEXEC)
+ /* mark the descriptor close-on-exec, so that
it won't be inherited by potential other children */
+ fcntl(descriptors[i].parentend, F_SETFD,
FD_CLOEXEC);
+# endif
#endif
if (stream) {
zval *retfp;
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/bug34794.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/standard/tests/general_functions/bug34794.phpt
diff -u /dev/null php-src/ext/standard/tests/general_functions/bug34794.phpt:1.2
--- /dev/null Tue Feb 13 19:56:42 2007
+++ php-src/ext/standard/tests/general_functions/bug34794.phpt Tue Feb 13
19:56:42 2007
@@ -0,0 +1,34 @@
+--TEST--
+bug #34794: proc_close() hangs when used with two processes
+--SKIPIF--
+<?php
+if (!is_executable('/bin/cat')) echo 'skip cat not found';
+?>
+--FILE--
+<?php
+echo "Opening process 1\n";
+$process1 = proc_open('/bin/cat', array(0 => array('pipe', 'r'), 1
=>array('pipe', 'r')), $pipes1);
+
+echo "Opening process 2\n";
+$process2 = proc_open('/bin/cat', array(0 => array('pipe', 'r'), 1
=>array('pipe', 'r')), $pipes2);
+
+
+echo "Closing process 1\n";
+fclose($pipes1[0]);
+fclose($pipes1[1]);
+proc_close($process1);
+
+echo "Closing process 2\n";
+fclose($pipes2[0]);
+fclose($pipes2[1]);
+proc_close($process2);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Opening process 1
+Opening process 2
+Closing process 1
+Closing process 2
+Done
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php