dmitry Wed Oct 19 03:55:05 2005 EDT Modified files: /php-src/ext/soap soap.c Log: Fixed memory leak in ZTS mode http://cvs.php.net/diff.php/php-src/ext/soap/soap.c?r1=1.164&r2=1.165&ty=u Index: php-src/ext/soap/soap.c diff -u php-src/ext/soap/soap.c:1.164 php-src/ext/soap/soap.c:1.165 --- php-src/ext/soap/soap.c:1.164 Sun Oct 9 07:31:51 2005 +++ php-src/ext/soap/soap.c Wed Oct 19 03:55:05 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: soap.c,v 1.164 2005/10/09 11:31:51 dmitry Exp $ */ +/* $Id: soap.c,v 1.165 2005/10/19 07:55:05 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -403,14 +403,16 @@ #endif PHP_INI_END() -static void php_soap_init_globals(zend_soap_globals *soap_globals) +static HashTable defEnc, defEncIndex, defEncNs; + +static void php_soap_prepare_globals() { int i; encodePtr enc; - zend_hash_init(&soap_globals->defEnc, 0, NULL, NULL, 1); - zend_hash_init(&soap_globals->defEncIndex, 0, NULL, NULL, 1); - zend_hash_init(&soap_globals->defEncNs, 0, NULL, NULL, 1); + zend_hash_init(&defEnc, 0, NULL, NULL, 1); + zend_hash_init(&defEncIndex, 0, NULL, NULL, 1); + zend_hash_init(&defEncNs, 0, NULL, NULL, 1); i = 0; do { @@ -422,27 +424,33 @@ char *ns_type; ns_type = emalloc(strlen(defaultEncoding[i].details.ns) + strlen(defaultEncoding[i].details.type_str) + 2); sprintf(ns_type, "%s:%s", defaultEncoding[i].details.ns, defaultEncoding[i].details.type_str); - zend_hash_add(&soap_globals->defEnc, ns_type, strlen(ns_type) + 1, &enc, sizeof(encodePtr), NULL); + zend_hash_add(&defEnc, ns_type, strlen(ns_type) + 1, &enc, sizeof(encodePtr), NULL); efree(ns_type); } else { - zend_hash_add(&soap_globals->defEnc, defaultEncoding[i].details.type_str, strlen(defaultEncoding[i].details.type_str) + 1, &enc, sizeof(encodePtr), NULL); + zend_hash_add(&defEnc, defaultEncoding[i].details.type_str, strlen(defaultEncoding[i].details.type_str) + 1, &enc, sizeof(encodePtr), NULL); } } /* Index everything by number */ - if (!zend_hash_index_exists(&soap_globals->defEncIndex, defaultEncoding[i].details.type)) { - zend_hash_index_update(&soap_globals->defEncIndex, defaultEncoding[i].details.type, &enc, sizeof(encodePtr), NULL); + if (!zend_hash_index_exists(&defEncIndex, defaultEncoding[i].details.type)) { + zend_hash_index_update(&defEncIndex, defaultEncoding[i].details.type, &enc, sizeof(encodePtr), NULL); } i++; } while (defaultEncoding[i].details.type != END_KNOWN_TYPES); /* hash by namespace */ - zend_hash_add(&soap_globals->defEncNs, XSD_1999_NAMESPACE, sizeof(XSD_1999_NAMESPACE), XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX), NULL); - zend_hash_add(&soap_globals->defEncNs, XSD_NAMESPACE, sizeof(XSD_NAMESPACE), XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX), NULL); - zend_hash_add(&soap_globals->defEncNs, XSI_NAMESPACE, sizeof(XSI_NAMESPACE), XSI_NS_PREFIX, sizeof(XSI_NS_PREFIX), NULL); - zend_hash_add(&soap_globals->defEncNs, XML_NAMESPACE, sizeof(XML_NAMESPACE), XML_NS_PREFIX, sizeof(XML_NS_PREFIX), NULL); - zend_hash_add(&soap_globals->defEncNs, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE), SOAP_1_1_ENC_NS_PREFIX, sizeof(SOAP_1_1_ENC_NS_PREFIX), NULL); - zend_hash_add(&soap_globals->defEncNs, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE), SOAP_1_2_ENC_NS_PREFIX, sizeof(SOAP_1_2_ENC_NS_PREFIX), NULL); + zend_hash_add(&defEncNs, XSD_1999_NAMESPACE, sizeof(XSD_1999_NAMESPACE), XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX), NULL); + zend_hash_add(&defEncNs, XSD_NAMESPACE, sizeof(XSD_NAMESPACE), XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX), NULL); + zend_hash_add(&defEncNs, XSI_NAMESPACE, sizeof(XSI_NAMESPACE), XSI_NS_PREFIX, sizeof(XSI_NS_PREFIX), NULL); + zend_hash_add(&defEncNs, XML_NAMESPACE, sizeof(XML_NAMESPACE), XML_NS_PREFIX, sizeof(XML_NS_PREFIX), NULL); + zend_hash_add(&defEncNs, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE), SOAP_1_1_ENC_NS_PREFIX, sizeof(SOAP_1_1_ENC_NS_PREFIX), NULL); + zend_hash_add(&defEncNs, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE), SOAP_1_2_ENC_NS_PREFIX, sizeof(SOAP_1_2_ENC_NS_PREFIX), NULL); +} +static void php_soap_init_globals(zend_soap_globals *soap_globals TSRMLS_DC) +{ + soap_globals->defEnc = defEnc; + soap_globals->defEncIndex = defEncIndex; + soap_globals->defEncNs = defEncNs; soap_globals->overrides = NULL; soap_globals->use_soap_error_handler = 0; soap_globals->error_code = NULL; @@ -479,6 +487,7 @@ zend_class_entry ce; /* TODO: add ini entry for always use soap errors */ + php_soap_prepare_globals(); ZEND_INIT_MODULE_GLOBALS(soap, php_soap_init_globals, NULL); REGISTER_INI_ENTRIES(); @@ -1902,10 +1911,10 @@ INIT_ZVAL(outbuflen); #ifdef va_copy va_copy(argcopy, args); - buffer_len = zend_vspprintf(&buffer, 0, format, argcopy); + buffer_len = vspprintf(&buffer, 0, format, argcopy); va_end(argcopy); #else - buffer_len = zend_vspprintf(&buffer, 0, format, args); + buffer_len = vspprintf(&buffer, 0, format, args); #endif if (code == NULL) { @@ -1957,10 +1966,10 @@ #ifdef va_copy va_copy(argcopy, args); - buffer_len = zend_vspprintf(&buffer, 0, format, argcopy); + buffer_len = vspprintf(&buffer, 0, format, argcopy); va_end(argcopy); #else - buffer_len = zend_vspprintf(&buffer, 0, format, args); + buffer_len = vspprintf(&buffer, 0, format, args); #endif if (code == NULL) {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php