]> granicus.if.org Git - php/commitdiff
Control VCRT leak reporting via environment variable in debug builds
authorChristoph M. Becker <cmbecker69@gmx.de>
Wed, 20 May 2020 16:53:40 +0000 (18:53 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 10 Jun 2020 07:05:17 +0000 (09:05 +0200)
Formerly, this had to be enabled by passing the configuration flag
`--enable-crt-debug`; now it can be enabled by setting the environment
variable `PHP_WIN32_DEBUG_HEAP`.  The advantage is that it is no longer
necessary to do separate builds, at the cost of a very minor
performance penalty during process startup.

UPGRADING.INTERNALS
Zend/zend_portability.h
ext/libxml/config.w32
sapi/cli/config.w32
sapi/cli/php_cli.c
win32/build/confutils.js

index def57d94b957247954d5f8e39c62238d7220a94e..58fec72abfa2431dcd99f20a96079a8d343f082c 100644 (file)
@@ -135,6 +135,11 @@ PHP 8.0 INTERNALS UPGRADE NOTES
 
   c. Windows build system changes
 
+    - The configuration option --enable-crt-debug has been removed. The VC
+      debug heap can now be enabled for debug builds by setting the environment
+      variable PHP_WIN32_DEBUG_HEAP to a non-negative number before PHP process
+      startup.
+
 ========================
 3. Module changes
 ========================
index 023fcd0510c4f54e1904198e576efe82ef5450e9..73ac3b4e41c15a758dc61d2581c160730bc8e897 100644 (file)
@@ -613,7 +613,7 @@ extern "C++" {
 # define ZEND_PREFER_RELOAD
 #endif
 
-#if defined(ZEND_WIN32) && defined(_DEBUG) && defined(PHP_WIN32_DEBUG_HEAP)
+#if defined(ZEND_WIN32) && defined(_DEBUG)
 # define ZEND_IGNORE_LEAKS_BEGIN() _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) & ~_CRTDBG_ALLOC_MEM_DF)
 # define ZEND_IGNORE_LEAKS_END() _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_ALLOC_MEM_DF)
 #else
index dd91c4b89352cf881b6dc4dd6980bc2ce006bfc7..b11c57bc44a72d645dfa3256f0be30baa3d28aac 100644 (file)
@@ -16,9 +16,6 @@ if (PHP_LIBXML == "yes") {
                        ADD_DEF_FILE("ext\\libxml\\php_libxml2.def");
                }
                PHP_INSTALL_HEADERS("ext/libxml/", "php_libxml.h");
-               if (PHP_CRT_DEBUG == "yes") {
-                       ADD_FLAG("CFLAGS_LIBXML", "/D PHP_WIN32_DEBUG_HEAP");
-               }
        } else {
                WARNING("libxml support can't be enabled, iconv or libxml are missing")
                PHP_LIBXML = "no"
index 26c53f78083b275ce8218da75c0a3119354da2b1..28bb2fd4c6d88655e865fe39a412671c244814bf 100644 (file)
@@ -1,16 +1,12 @@
 // vim:ft=javascript
 
 ARG_ENABLE('cli', 'Build CLI version of PHP', 'yes');
-ARG_ENABLE('crt-debug', 'Enable CRT memory dumps for debugging sent to STDERR', 'no');
 ARG_ENABLE('cli-win32', 'Build console-less CLI version of PHP', 'no');
 
 if (PHP_CLI == "yes") {
        SAPI('cli', 'php_cli.c php_http_parser.c php_cli_server.c php_cli_process_title.c ps_title.c', 'php.exe', '/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1');
        ADD_FLAG("LIBS_CLI", "ws2_32.lib");
        ADD_FLAG("LIBS_CLI", "shell32.lib");
-       if (PHP_CRT_DEBUG == "yes") {
-               ADD_FLAG("CFLAGS_CLI", "/D PHP_WIN32_DEBUG_HEAP");
-       }
        ADD_FLAG("LDFLAGS_CLI", "/stack:67108864");
 
        if (CHECK_LIB("edit_a.lib;edit.lib", "cli", PHP_CLI) &&
index a9069c6191afb8dc02a28fd1305a461632df07c2..dfda90fb8ef06f53ad7ec36c0e6895af2ec4efa3 100644 (file)
@@ -1184,20 +1184,23 @@ int main(int argc, char *argv[])
 
        cli_sapi_module.additional_functions = additional_functions;
 
-#if defined(PHP_WIN32) && defined(_DEBUG) && defined(PHP_WIN32_DEBUG_HEAP)
+#if defined(PHP_WIN32) && defined(_DEBUG)
        {
-               int tmp_flag;
-               _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
-               _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
-               _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
-               _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
-               _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
-               _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
-               tmp_flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
-               tmp_flag |= _CRTDBG_DELAY_FREE_MEM_DF;
-               tmp_flag |= _CRTDBG_LEAK_CHECK_DF;
-
-               _CrtSetDbgFlag(tmp_flag);
+               char *tmp = getenv("PHP_WIN32_DEBUG_HEAP");
+               if (tmp && zend_atoi(tmp, 0)) {
+                       int tmp_flag;
+                       _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
+                       _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+                       _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
+                       _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
+                       _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
+                       _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
+                       tmp_flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
+                       tmp_flag |= _CRTDBG_DELAY_FREE_MEM_DF;
+                       tmp_flag |= _CRTDBG_LEAK_CHECK_DF;
+
+                       _CrtSetDbgFlag(tmp_flag);
+               }
        }
 #endif
 
index 9d2d578516ac9b24601b1df4bfeb0221121ebace..5d6ba3baac0fa6995faa80aef102cdc45d7ae1f0 100644 (file)
@@ -437,7 +437,7 @@ can be built that way. \
        }
 
        var snapshot_build_exclusions = new Array(
-               'debug', 'crt-debug', 'lzf-better-compression',
+               'debug', 'lzf-better-compression',
                 'php-build', 'snapshot-template', 'ereg',
                 'pcre-regex', 'fastcgi', 'force-cgi-redirect',
                 'path-info-check', 'zts', 'ipv6', 'memory-limit',