aboutsummaryrefslogtreecommitdiff
path: root/php/ext/google/protobuf/protobuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'php/ext/google/protobuf/protobuf.c')
-rw-r--r--php/ext/google/protobuf/protobuf.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/php/ext/google/protobuf/protobuf.c b/php/ext/google/protobuf/protobuf.c
index 2b5b58c6..dc730030 100644
--- a/php/ext/google/protobuf/protobuf.c
+++ b/php/ext/google/protobuf/protobuf.c
@@ -63,7 +63,6 @@ static void* get_from_table(const HashTable* t, const void* def) {
void** value;
if (php_proto_zend_hash_index_find_mem(t, (zend_ulong)def, (void**)&value) ==
FAILURE) {
- zend_error(E_ERROR, "PHP object not found for given definition.\n");
return NULL;
}
return *value;
@@ -166,6 +165,7 @@ static PHP_RINIT_FUNCTION(protobuf) {
generated_pool = NULL;
generated_pool_php = NULL;
+ internal_generated_pool_php = NULL;
return 0;
}
@@ -182,21 +182,40 @@ static PHP_RSHUTDOWN_FUNCTION(protobuf) {
zval_dtor(generated_pool_php);
FREE_ZVAL(generated_pool_php);
}
+ if (internal_generated_pool_php != NULL) {
+ zval_dtor(internal_generated_pool_php);
+ FREE_ZVAL(internal_generated_pool_php);
+ }
+#else
+ if (generated_pool_php != NULL) {
+ zval tmp;
+ ZVAL_OBJ(&tmp, generated_pool_php);
+ zval_dtor(&tmp);
+ }
+ if (internal_generated_pool_php != NULL) {
+ zval tmp;
+ ZVAL_OBJ(&tmp, internal_generated_pool_php);
+ zval_dtor(&tmp);
+ }
#endif
return 0;
}
static PHP_MINIT_FUNCTION(protobuf) {
+ descriptor_pool_init(TSRMLS_C);
+ descriptor_init(TSRMLS_C);
+ enum_descriptor_init(TSRMLS_C);
+ enum_value_descriptor_init(TSRMLS_C);
+ field_descriptor_init(TSRMLS_C);
+ gpb_type_init(TSRMLS_C);
+ internal_descriptor_pool_init(TSRMLS_C);
map_field_init(TSRMLS_C);
map_field_iter_init(TSRMLS_C);
+ message_init(TSRMLS_C);
+ oneof_descriptor_init(TSRMLS_C);
repeated_field_init(TSRMLS_C);
repeated_field_iter_init(TSRMLS_C);
- gpb_type_init(TSRMLS_C);
- message_init(TSRMLS_C);
- descriptor_pool_init(TSRMLS_C);
- descriptor_init(TSRMLS_C);
- enum_descriptor_init(TSRMLS_C);
util_init(TSRMLS_C);
return 0;