JFC, fix the merge here, too
[m6w6/ext-raphf] / php_raphf.c
index 1e4276bd6f78483565c3464e8f4db0c34a442f5f..f867af6d7a13137f17fad2d40d69a542ceb94e10 100644 (file)
@@ -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;
                        }