X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-pq;a=blobdiff_plain;f=src%2Fphp_pqlob.c;h=755599eea2a98b1aaa2ff46feac0380ae7d9c999;hp=2dc9be3d28004529cca0d35db95b5eb265bb766b;hb=da7b5981c5ae28504434c492d468913645111d66;hpb=6c838021951716e5b37a0c891cd40c669268de8c diff --git a/src/php_pqlob.c b/src/php_pqlob.c index 2dc9be3..755599e 100644 --- a/src/php_pqlob.c +++ b/src/php_pqlob.c @@ -243,9 +243,12 @@ static PHP_METHOD(pqlob, __construct) { zend_restore_error_handling(&zeh TSRMLS_CC); if (SUCCESS == rv) { + php_pqlob_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); php_pqtxn_object_t *txn_obj = zend_object_store_get_object(ztxn TSRMLS_CC); - if (!txn_obj->intern) { + if (obj->intern) { + throw_exce(EX_BAD_METHODCALL TSRMLS_CC, "pq\\LOB already initialized"); + } else if (!txn_obj->intern) { throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Transaction not initialized"); } else if (!txn_obj->intern->open) { throw_exce(EX_RUNTIME TSRMLS_CC, "pq\\Transation already closed"); @@ -262,8 +265,6 @@ static PHP_METHOD(pqlob, __construct) { if (lofd < 0) { throw_exce(EX_RUNTIME TSRMLS_CC, "Failed to open large object with oid=%u with mode '%s' (%s)", loid, strmode(mode), PHP_PQerrorMessage(txn_obj->intern->conn->intern->conn)); } else { - php_pqlob_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - obj->intern = ecalloc(1, sizeof(*obj->intern)); obj->intern->lofd = lofd; obj->intern->loid = loid; @@ -449,6 +450,12 @@ static zend_function_entry php_pqlob_methods[] = { {0} }; +PHP_MSHUTDOWN_FUNCTION(pqlob) +{ + zend_hash_destroy(&php_pqlob_object_prophandlers); + return SUCCESS; +} + PHP_MINIT_FUNCTION(pqlob) { zend_class_entry ce = {0}; @@ -463,6 +470,7 @@ PHP_MINIT_FUNCTION(pqlob) php_pqlob_object_handlers.write_property = php_pq_object_write_prop; php_pqlob_object_handlers.clone_obj = NULL; php_pqlob_object_handlers.get_property_ptr_ptr = NULL; + php_pqlob_object_handlers.get_gc = NULL; php_pqlob_object_handlers.get_properties = php_pq_object_properties; php_pqlob_object_handlers.get_debug_info = php_pq_object_debug_info;