Merge branch 'PHP-7.4'

* PHP-7.4:
  Make MSVCRT memory leak checking usable for the test suite
This commit is contained in:
Christoph M. Becker 2020-01-23 11:48:20 +01:00
commit 046dcfb531
6 changed files with 41 additions and 4 deletions

View File

@ -610,4 +610,12 @@ extern "C++" {
# define ZEND_PREFER_RELOAD
#endif
#if defined(ZEND_WIN32) && defined(_DEBUG) && defined(PHP_WIN32_DEBUG_HEAP)
# 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
# define ZEND_IGNORE_LEAKS_BEGIN()
# define ZEND_IGNORE_LEAKS_END()
#endif
#endif /* ZEND_PORTABILITY_H */

View File

@ -546,6 +546,7 @@ Bigint {
static Bigint *freelist[Kmax+1];
static void destroy_freelist(void);
static void free_p5s(void);
#ifdef ZTS
static MUTEX_T dtoa_mutex;
@ -564,6 +565,8 @@ ZEND_API int zend_startup_strtod(void) /* {{{ */
ZEND_API int zend_shutdown_strtod(void) /* {{{ */
{
destroy_freelist();
free_p5s();
#ifdef ZTS
tsrm_mutex_free(dtoa_mutex);
dtoa_mutex = NULL;
@ -4540,6 +4543,19 @@ static void destroy_freelist(void)
FREE_DTOA_LOCK(0)
}
static void free_p5s(void)
{
Bigint **listp, *tmp;
ACQUIRE_DTOA_LOCK(1)
listp = &p5s;
while ((tmp = *listp) != NULL) {
*listp = tmp->next;
free(tmp);
}
FREE_DTOA_LOCK(1)
}
#ifdef __cplusplus
}
#endif

View File

@ -59414,13 +59414,17 @@ void zend_vm_init(void)
VM_TRACE_START();
}
static HashTable *zend_handlers_table = NULL;
void zend_vm_dtor(void)
{
VM_TRACE_END();
if (zend_handlers_table) {
zend_hash_destroy(zend_handlers_table);
free(zend_handlers_table);
}
}
static HashTable *zend_handlers_table = NULL;
static void init_opcode_serialiser(void)
{
int i;

View File

@ -67,13 +67,17 @@ void {%INITIALIZER_NAME%}(void)
VM_TRACE_START();
}
static HashTable *zend_handlers_table = NULL;
void zend_vm_dtor(void)
{
VM_TRACE_END();
if (zend_handlers_table) {
zend_hash_destroy(zend_handlers_table);
free(zend_handlers_table);
}
}
static HashTable *zend_handlers_table = NULL;
static void init_opcode_serialiser(void)
{
int i;

View File

@ -16,6 +16,9 @@ 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"

View File

@ -724,7 +724,9 @@ PHP_LIBXML_API void php_libxml_initialize(void)
{
if (!_php_libxml_initialized) {
/* we should be the only one's to ever init!! */
ZEND_IGNORE_LEAKS_BEGIN();
xmlInitParser();
ZEND_IGNORE_LEAKS_END();
_php_libxml_default_entity_loader = xmlGetExternalEntityLoader();
xmlSetExternalEntityLoader(_php_libxml_pre_ext_ent_loader);