From: Gustavo Lopes Date: Mon, 23 Jul 2012 14:36:24 +0000 (+0200) Subject: Add ini setting intl.explicit_cleanup X-Git-Tag: php-5.5.0alpha1~20^2~164 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0dfcc3e798cd54714f792bf7507c37b96146ee1b;p=php Add ini setting intl.explicit_cleanup This is to help with looking for leaks. If set to true, this ini setting forces a call to u_cleanup() on module shutdown. --- diff --git a/ext/intl/php_intl.c b/ext/intl/php_intl.c index d7ed9dc6e5..41a1d1c0af 100755 --- a/ext/intl/php_intl.c +++ b/ext/intl/php_intl.c @@ -96,6 +96,7 @@ #include "common/common_enum.h" #include +#include #include #include "php_ini.h" @@ -852,16 +853,39 @@ zend_function_entry intl_functions[] = { }; /* }}} */ +static zend_bool explicit_cleanup = 0; + +static ZEND_INI_MH(OnExplicitCleanupUpdate) +{ + if (stage == PHP_INI_STAGE_STARTUP) { + if (new_value_length == 2 && strcasecmp("on", new_value) == 0) { + explicit_cleanup = (zend_bool)1; + } + else if (new_value_length == 3 && strcasecmp("yes", new_value) == 0) { + explicit_cleanup = (zend_bool)1; + } + else if (new_value_length == 4 && strcasecmp("true", new_value) == 0) { + explicit_cleanup = (zend_bool)1; + } + else { + explicit_cleanup = (zend_bool)atoi(new_value); + } + return SUCCESS; + } else { + return FAILURE; + } +} + /* {{{ INI Settings */ PHP_INI_BEGIN() STD_PHP_INI_ENTRY(LOCALE_INI_NAME, NULL, PHP_INI_ALL, OnUpdateStringUnempty, default_locale, zend_intl_globals, intl_globals) STD_PHP_INI_ENTRY("intl.error_level", "0", PHP_INI_ALL, OnUpdateLong, error_level, zend_intl_globals, intl_globals) STD_PHP_INI_ENTRY("intl.use_exceptions", "0", PHP_INI_ALL, OnUpdateBool, use_exceptions, zend_intl_globals, intl_globals) + PHP_INI_ENTRY_EX("intl.explicit_cleanup", "0", 0, OnExplicitCleanupUpdate, zend_ini_boolean_displayer_cb) PHP_INI_END() /* }}} */ - static PHP_GINIT_FUNCTION(intl); /* {{{ intl_module_entry */ @@ -1003,6 +1027,10 @@ PHP_MSHUTDOWN_FUNCTION( intl ) /* For the default locale php.ini setting */ UNREGISTER_INI_ENTRIES(); + if (explicit_cleanup) { + u_cleanup(); + } + return SUCCESS; } /* }}} */