X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=php_raphf.c;h=f867af6d7a13137f17fad2d40d69a542ceb94e10;hb=7a7b4dc3fbcc3d55d536a871b1232ae5750bba49;hp=1e4276bd6f78483565c3464e8f4db0c34a442f5f;hpb=502a992120e983e28b1adad77c7bc5096fdc3df2;p=m6w6%2Fext-raphf diff --git a/php_raphf.c b/php_raphf.c index 1e4276b..f867af6 100644 --- a/php_raphf.c +++ b/php_raphf.c @@ -115,6 +115,19 @@ void php_resource_factory_handle_dtor(php_resource_factory_t *f, void *handle) } } +php_resource_factory_t *php_persistent_handle_resource_factory_init( + php_resource_factory_t *a, php_persistent_handle_factory_t *pf) +{ + return php_resource_factory_init(a, + php_persistent_handle_get_resource_factory_ops(), pf, + (void(*)(void*)) php_persistent_handle_abandon); +} + +zend_bool php_resource_factory_is_persistent(php_resource_factory_t *a) +{ + return a->dtor == (void(*)(void *)) php_persistent_handle_abandon; +} + static inline php_persistent_handle_list_t *php_persistent_handle_list_init( php_persistent_handle_list_t *list) { @@ -243,10 +256,15 @@ static inline php_persistent_handle_list_t *php_persistent_handle_list_find( } if ((list = php_persistent_handle_list_init(NULL))) { - zval p; + zval p, *rv; + zend_string *id; ZVAL_PTR(&p, list); - if (zend_symtable_update(&provider->list.free, ident, &p)) { + id = zend_string_init(ident->val, ident->len, 1); + rv = zend_symtable_update(&provider->list.free, id, &p); + zend_string_release(id); + + if (rv) { #if PHP_RAPHF_DEBUG_PHANDLES fprintf(stderr, "LSTFIND: %p (new)\n", list); #endif @@ -305,15 +323,10 @@ ZEND_RESULT_CODE php_persistent_handle_provide(zend_string *name, #endif ZVAL_PTR(&p, provider); - if ((GC_FLAGS(name) & IS_STR_PERSISTENT)) { - ns = name; - } else { - ns = zend_string_dup(name, 1); - } + ns = zend_string_init(name->val, name->len, 1); rv = zend_symtable_update(&PHP_RAPHF_G->persistent_handle.hash, ns, &p); - if (ns != name) { - zend_string_release(ns); - } + zend_string_release(ns); + if (rv) { return SUCCESS; }