dmitry Mon Apr 17 13:16:15 2006 UTC Modified files: /php-src/ext/soap php_sdl.c Log: Fixed several bugs in new "caching WSDL in memory" code Re-enabled disk cache http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/php_sdl.c?r1=1.96&r2=1.97&diff_format=u Index: php-src/ext/soap/php_sdl.c diff -u php-src/ext/soap/php_sdl.c:1.96 php-src/ext/soap/php_sdl.c:1.97 --- php-src/ext/soap/php_sdl.c:1.96 Mon Apr 10 10:11:29 2006 +++ php-src/ext/soap/php_sdl.c Mon Apr 17 13:16:15 2006 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_sdl.c,v 1.96 2006/04/10 10:11:29 dmitry Exp $ */ +/* $Id: php_sdl.c,v 1.97 2006/04/17 13:16:15 dmitry Exp $ */ #include "php_soap.h" #include "ext/libxml/php_libxml.h" @@ -2269,7 +2269,7 @@ sdlRestrictionIntPtr *rest = (sdlRestrictionIntPtr *)data; sdlRestrictionIntPtr prest = NULL; - prest = malloc(sizeof(sdlRestrictionIntPtr)); + prest = malloc(sizeof(sdlRestrictionInt)); *prest = **rest; *rest = prest; } @@ -2843,8 +2843,12 @@ psdl = malloc(sizeof(*sdl)); memset(psdl, 0, sizeof(*sdl)); - psdl->source = strdup(sdl->source); - psdl->target_ns = strdup(sdl->target_ns); + if (sdl->source) { + psdl->source = strdup(sdl->source); + } + if (sdl->target_ns) { + psdl->target_ns = strdup(sdl->target_ns); + } if (sdl->groups) { sdlTypePtr *tmp; @@ -3026,6 +3030,20 @@ php_stream_context *context=NULL; zval **tmp, **proxy_host, **proxy_port, *orig_context = NULL, *new_context = NULL; smart_str headers = {0}; + char *pkey = NULL; + int plen; + + if (persistent) { + zend_rsrc_list_entry *le_ptr; + + plen = spprintf(&pkey, 0, "SOAP:WSDL:%s", uri); + if (SUCCESS == zend_hash_find(&EG(persistent_list), pkey, plen+1, (void*)&le_ptr)) { + if (Z_TYPE_P(le_ptr) == php_soap_psdl_list_entry()) { + efree(pkey); + return (sdlPtr)le_ptr->ptr; + } + } + } if (SUCCESS == zend_hash_find(Z_OBJPROP_P(this_ptr), "_stream_context", sizeof("_stream_context"), (void**)&tmp)) { @@ -3090,7 +3108,6 @@ SOAP_GLOBAL(error_code) = "WSDL"; -#if 0 if (SOAP_GLOBAL(cache_enabled) && ((uri_len = strlen(uri)) < MAXPATHLEN)) { char fn[MAXPATHLEN]; @@ -3128,26 +3145,21 @@ } else { sdl = load_wsdl(this_ptr, uri TSRMLS_CC); } -#endif + + if (sdl) { + sdl->is_persistent = 0; + } if (persistent) { - char *hashkey = NULL; - int plen; - zend_rsrc_list_entry le, *le_ptr; + if (sdl) { + zend_rsrc_list_entry le; + sdlPtr psdl = make_persistent_sdl(sdl TSRMLS_CC); - plen = spprintf(&hashkey, 0, "SOAP:WSDL:%s", uri); - if (SUCCESS == zend_hash_find(&EG(persistent_list), hashkey, plen+1, (void*)&le_ptr)) { - if (Z_TYPE_P(le_ptr) == php_soap_psdl_list_entry()) { - sdl = (sdlPtr)le_ptr->ptr; - } - } else { - sdlPtr psdl = NULL; - sdl = load_wsdl(this_ptr, uri TSRMLS_CC); - psdl = make_persistent_sdl(sdl TSRMLS_CC); psdl->is_persistent = 1; le.type = php_soap_psdl_list_entry(); le.ptr = psdl; - if (SUCCESS == zend_hash_update(&EG(persistent_list), hashkey, + le.refcount = 0; + if (SUCCESS == zend_hash_update(&EG(persistent_list), pkey, plen+1, (void*)&le, sizeof(le), NULL)) { /* remove non-persitent sdl structure */ delete_sdl_impl(sdl); @@ -3156,14 +3168,11 @@ } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to register persistent entry"); /* clean up persistent sdl */ - delete_psdl(le_ptr TSRMLS_CC); + delete_psdl(&le TSRMLS_CC); /* keep non-persistent sdl and return it */ } } - efree(hashkey); - } else { - sdl = load_wsdl(this_ptr, uri TSRMLS_CC); - sdl->is_persistent = 0; + efree(pkey); } SOAP_GLOBAL(error_code) = old_error_code;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php