]> granicus.if.org Git - php/commitdiff
Report mem leaks to stderr if no Win debugger is present
authorChristoph M. Becker <cmbecker69@gmx.de>
Sat, 8 Sep 2018 11:57:01 +0000 (13:57 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Sat, 8 Sep 2018 11:57:01 +0000 (13:57 +0200)
Formerly, we sent output regarding memory leaks always to the debugger
on Windows, but this appears to be not useful especially for the PHPTs,
which usually are not run under a debugger, and so important info will
not be available there.

main/main.c

index e4ae28d87bb46e7861ef19f3408892b4407111e9..c9c05dece5c205bc97e027f41692ff977882b446 100644 (file)
@@ -1681,7 +1681,11 @@ static ZEND_COLD void php_message_handler_for_zend(zend_long message, const void
                                        snprintf(memory_leak_buf, 512, "Last leak repeated %lu time%s\n", leak_count, (leak_count>1?"s":""));
                                }
 #      if defined(PHP_WIN32)
-                               OutputDebugString(memory_leak_buf);
+                               if (IsDebuggerPresent()) {
+                                       OutputDebugString(memory_leak_buf);
+                               } else {
+                                       fprintf(stderr, "%s", memory_leak_buf);
+                               }
 #      else
                                fprintf(stderr, "%s", memory_leak_buf);
 #      endif
@@ -1695,7 +1699,11 @@ static ZEND_COLD void php_message_handler_for_zend(zend_long message, const void
 
                                snprintf(memory_leak_buf, 512, "=== Total %d memory leaks detected ===\n", *((uint32_t *) data));
 #      if defined(PHP_WIN32)
-                               OutputDebugString(memory_leak_buf);
+                               if (IsDebuggerPresent()) {
+                                       OutputDebugString(memory_leak_buf);
+                               } else {
+                                       fprintf(stderr, "%s", memory_leak_buf);
+                               }
 #      else
                                fprintf(stderr, "%s", memory_leak_buf);
 #      endif
@@ -1718,7 +1726,11 @@ static ZEND_COLD void php_message_handler_for_zend(zend_long message, const void
                                        snprintf(memory_leak_buf, sizeof(memory_leak_buf), "[null]  Script:  '%s'\n", SAFE_FILENAME(SG(request_info).path_translated));
                                }
 #      if defined(PHP_WIN32)
-                               OutputDebugString(memory_leak_buf);
+                               if (IsDebuggerPresent()) {
+                                       OutputDebugString(memory_leak_buf);
+                               } else {
+                                       fprintf(stderr, "%s", memory_leak_buf);
+                               }
 #      else
                                fprintf(stderr, "%s", memory_leak_buf);
 #      endif