From: Antony Dovgal Date: Wed, 21 Feb 2007 21:56:45 +0000 (+0000) Subject: implement PHP_STREAM_FLAG_NO_CLOSE and avoid hacks in plain wrapper X-Git-Tag: RELEASE_1_0_1~188 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=30dacafa720d65e9acbc4ce2a8845e47c60d16da;p=php implement PHP_STREAM_FLAG_NO_CLOSE and avoid hacks in plain wrapper --- diff --git a/main/php_streams.h b/main/php_streams.h index fd0060dbac..0d0cf1750b 100755 --- a/main/php_streams.h +++ b/main/php_streams.h @@ -186,6 +186,8 @@ struct _php_stream_wrapper { * might otherwise cause the read to block for much longer than * is strictly required. */ #define PHP_STREAM_FLAG_AVOID_BLOCKING 16 + +#define PHP_STREAM_FLAG_NO_CLOSE 32 struct _php_stream { php_stream_ops *ops; diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c index 4c25801f1d..83bf4c4dab 100644 --- a/main/streams/plain_wrapper.c +++ b/main/streams/plain_wrapper.c @@ -396,16 +396,7 @@ static int php_stdiop_close(php_stream *stream, int close_handle TSRMLS_DC) data->file = NULL; } } else if (data->fd != -1) { -#if PHP_DEBUG - if ((data->fd == 1 || data->fd == 2) && 0 == strcmp(sapi_module.name, "cli")) { - /* don't close stdout or stderr in CLI in DEBUG mode, as we want to see any leaks */ - ret = 0; - } else { - ret = close(data->fd); - } -#else ret = close(data->fd); -#endif data->fd = -1; } else { return 0; /* everything should be closed already -> success */ diff --git a/main/streams/streams.c b/main/streams/streams.c index 13d125f2e5..8717ce00ce 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -285,6 +285,10 @@ PHPAPI int _php_stream_free(php_stream *stream, int close_options TSRMLS_DC) /* int preserve_handle = close_options & PHP_STREAM_FREE_PRESERVE_HANDLE ? 1 : 0; int release_cast = 1; + if (stream->flags & PHP_STREAM_FLAG_NO_CLOSE) { + preserve_handle = 1; + } + #if STREAM_DEBUG fprintf(stderr, "stream_free: %s:%p[%s] in_free=%d opts=%08x\n", stream->ops->label, stream, stream->orig_path, stream->in_free, close_options); #endif diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index 996a5674a1..33231445c2 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -487,6 +487,12 @@ static void cli_register_file_handles(TSRMLS_D) s_out = php_stream_open_wrapper_ex("php://stdout", "wb", 0, NULL, sc_out); s_err = php_stream_open_wrapper_ex("php://stderr", "wb", 0, NULL, sc_err); +#if PHP_DEBUG + /* do not close stdout and stderr */ + s_out->flags |= PHP_STREAM_FLAG_NO_CLOSE; + s_err->flags |= PHP_STREAM_FLAG_NO_CLOSE; +#endif + if (s_in==NULL || s_out==NULL || s_err==NULL) { FREE_ZVAL(zin); FREE_ZVAL(zout);