dmitry          Wed Oct 19 03:54:54 2005 EDT

  Modified files:              (Branch: PHP_5_1)
    /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.156.2.6&r2=1.156.2.7&ty=u
Index: php-src/ext/soap/soap.c
diff -u php-src/ext/soap/soap.c:1.156.2.6 php-src/ext/soap/soap.c:1.156.2.7
--- php-src/ext/soap/soap.c:1.156.2.6   Wed Oct  5 03:02:30 2005
+++ php-src/ext/soap/soap.c     Wed Oct 19 03:54:53 2005
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: soap.c,v 1.156.2.6 2005/10/05 07:02:30 dmitry Exp $ */
+/* $Id: soap.c,v 1.156.2.7 2005/10/19 07:54:53 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();
 

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to