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