Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions php/ext/google/protobuf/def.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ PHP_METHOD(Descriptor, getField) {
#else
field_hashtable_value =
field_descriptor_type->create_object(field_descriptor_type TSRMLS_CC);
--GC_REFCOUNT(field_hashtable_value);
GC_DELREF(field_hashtable_value);
#endif
FieldDescriptor *field_php =
UNBOX_HASHTABLE_VALUE(FieldDescriptor, field_hashtable_value);
Expand All @@ -264,7 +264,7 @@ PHP_METHOD(Descriptor, getField) {
#if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(field_hashtable_value, 1, 0);
#else
++GC_REFCOUNT(field_hashtable_value);
GC_ADDREF(field_hashtable_value);
RETURN_OBJ(field_hashtable_value);
#endif
}
Expand Down Expand Up @@ -492,7 +492,7 @@ PHP_METHOD(FieldDescriptor, getEnumType) {
#if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(desc, 1, 0);
#else
++GC_REFCOUNT(desc);
GC_ADDREF(desc);
RETURN_OBJ(desc);
#endif
}
Expand All @@ -512,7 +512,7 @@ PHP_METHOD(FieldDescriptor, getMessageType) {
#if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(desc, 1, 0);
#else
++GC_REFCOUNT(desc);
GC_ADDREF(desc);
RETURN_OBJ(desc);
#endif
}
Expand Down Expand Up @@ -585,7 +585,7 @@ PHP_METHOD(Oneof, getField) {
#if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(field_hashtable_value, 1, 0);
#else
++GC_REFCOUNT(field_hashtable_value);
GC_ADDREF(field_hashtable_value);
RETURN_OBJ(field_hashtable_value);
#endif
}
Expand Down Expand Up @@ -703,7 +703,7 @@ PHP_METHOD(DescriptorPool, getGeneratedPool) {
#if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(generated_pool_php, 1, 0);
#else
++GC_REFCOUNT(generated_pool_php);
GC_ADDREF(generated_pool_php);
RETURN_OBJ(generated_pool_php);
#endif
}
Expand All @@ -713,7 +713,7 @@ PHP_METHOD(InternalDescriptorPool, getGeneratedPool) {
#if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(internal_generated_pool_php, 1, 0);
#else
++GC_REFCOUNT(internal_generated_pool_php);
GC_ADDREF(internal_generated_pool_php);
RETURN_OBJ(internal_generated_pool_php);
#endif
}
Expand Down Expand Up @@ -1033,7 +1033,7 @@ PHP_METHOD(DescriptorPool, getDescriptorByClassName) {
#if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(desc, 1, 0);
#else
++GC_REFCOUNT(desc);
GC_ADDREF(desc);
RETURN_OBJ(desc);
#endif
}
Expand Down Expand Up @@ -1070,7 +1070,7 @@ PHP_METHOD(DescriptorPool, getEnumDescriptorByClassName) {
#if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(desc, 1, 0);
#else
++GC_REFCOUNT(desc);
GC_ADDREF(desc);
RETURN_OBJ(desc);
#endif
}
2 changes: 1 addition & 1 deletion php/ext/google/protobuf/encode_decode.c
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,7 @@ static void map_slot_value(upb_fieldtype_t type, const void* from,
break;
case UPB_TYPE_MESSAGE:
*(zend_object**)to = Z_OBJ_P(*(zval**)from);
++GC_REFCOUNT(*(zend_object**)to);
GC_ADDREF(*(zend_object**)to);
break;
#endif
default:
Expand Down
6 changes: 4 additions & 2 deletions php/ext/google/protobuf/map.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,8 @@ static inline void php_proto_map_string_release(void *value) {
}
static inline void php_proto_map_object_release(void *value) {
zend_object* object = *(zend_object**)value;
if(--GC_REFCOUNT(object) == 0) {
GC_DELREF(object);
if(GC_REFCOUNT(object) == 0) {
zend_objects_store_del(object);
}
}
Expand Down Expand Up @@ -302,7 +303,8 @@ static bool map_index_unset(Map *intern, const char* keyval, int length) {
zval_ptr_dtor(upb_value_memory(&old_value));
#else
zend_object* object = *(zend_object**)upb_value_memory(&old_value);
if(--GC_REFCOUNT(object) == 0) {
GC_DELREF(object);
if(GC_REFCOUNT(object) == 0) {
zend_objects_store_del(object);
}
#endif
Expand Down
8 changes: 8 additions & 0 deletions php/ext/google/protobuf/message.c
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,11 @@ PHP_PROTO_INIT_ENUMCLASS_START("Google\\Protobuf\\Field\\Cardinality",
zend_declare_class_constant_long(field_cardinality_type,
"CARDINALITY_REPEATED", 20, 3 TSRMLS_CC);
const char *alias = "Google\\Protobuf\\Field_Cardinality";
#if PHP_VERSION_ID < 70300
zend_register_class_alias_ex(alias, strlen(alias), field_cardinality_type TSRMLS_CC);
#else
zend_register_class_alias_ex(alias, strlen(alias), field_cardinality_type, 1);
#endif
PHP_PROTO_INIT_ENUMCLASS_END

// -----------------------------------------------------------------------------
Expand Down Expand Up @@ -924,7 +928,11 @@ PHP_PROTO_INIT_ENUMCLASS_START("Google\\Protobuf\\Field\\Kind",
zend_declare_class_constant_long(field_kind_type,
"TYPE_SINT64", 11, 18 TSRMLS_CC);
const char *alias = "Google\\Protobuf\\Field_Kind";
#if PHP_VERSION_ID < 70300
zend_register_class_alias_ex(alias, strlen(alias), field_kind_type TSRMLS_CC);
#else
zend_register_class_alias_ex(alias, strlen(alias), field_kind_type, 1);
#endif
PHP_PROTO_INIT_ENUMCLASS_END

// -----------------------------------------------------------------------------
Expand Down
9 changes: 5 additions & 4 deletions php/ext/google/protobuf/protobuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ void add_def_obj(const void* def, PHP_PROTO_HASHTABLE_VALUE value) {
#if PHP_MAJOR_VERSION < 7
Z_ADDREF_P(value);
#else
++GC_REFCOUNT(value);
GC_ADDREF(value);
#endif
add_to_table(upb_def_to_php_obj_map, def, value);
}
Expand All @@ -117,7 +117,7 @@ void add_ce_obj(const void* ce, PHP_PROTO_HASHTABLE_VALUE value) {
#if PHP_MAJOR_VERSION < 7
Z_ADDREF_P(value);
#else
++GC_REFCOUNT(value);
GC_ADDREF(value);
#endif
add_to_table(ce_to_php_obj_map, ce, value);
}
Expand All @@ -134,7 +134,7 @@ void add_proto_obj(const char* proto, PHP_PROTO_HASHTABLE_VALUE value) {
#if PHP_MAJOR_VERSION < 7
Z_ADDREF_P(value);
#else
++GC_REFCOUNT(value);
GC_ADDREF(value);
#endif
add_to_strtable(proto_to_php_obj_map, proto, strlen(proto), value);
}
Expand Down Expand Up @@ -235,7 +235,8 @@ static PHP_GSHUTDOWN_FUNCTION(protobuf) {
static void php_proto_hashtable_descriptor_release(zval* value) {
void* ptr = Z_PTR_P(value);
zend_object* object = *(zend_object**)ptr;
if(--GC_REFCOUNT(object) == 0) {
GC_DELREF(object);
if(GC_REFCOUNT(object) == 0) {
zend_objects_store_del(object);
}
efree(ptr);
Expand Down
7 changes: 6 additions & 1 deletion php/ext/google/protobuf/protobuf.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@
// PHP7 Wrappers
// ----------------------------------------------------------------------------

#if PHP_VERSION_ID < 70300
#define GC_ADDREF(h) ++GC_REFCOUNT(h)
#define GC_DELREF(h) --GC_REFCOUNT(h)
#endif

#if PHP_MAJOR_VERSION < 7

#define php_proto_zend_literal const zend_literal*
Expand Down Expand Up @@ -496,7 +501,7 @@ static inline int php_proto_zend_hash_get_current_data_ex(HashTable* ht,
PHP_PROTO_HASHTABLE_VALUE WRAPPED_OBJ; \
WRAPPED_OBJ = OBJ_CLASS_ENTRY->create_object(OBJ_CLASS_ENTRY); \
OBJ = UNBOX_HASHTABLE_VALUE(OBJ_TYPE, WRAPPED_OBJ); \
--GC_REFCOUNT(WRAPPED_OBJ);
GC_DELREF(WRAPPED_OBJ);

#define PHP_PROTO_CE_DECLARE zend_class_entry*
#define PHP_PROTO_CE_UNREF(ce) (ce)
Expand Down
6 changes: 3 additions & 3 deletions php/ext/google/protobuf/storage.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ bool native_slot_set_by_array(upb_fieldtype_t type,
}
#else
DEREF(memory, zval*) = value;
++GC_REFCOUNT(Z_OBJ_P(value));
GC_ADDREF(Z_OBJ_P(value));
#endif
break;
}
Expand Down Expand Up @@ -251,7 +251,7 @@ bool native_slot_set_by_map(upb_fieldtype_t type, const zend_class_entry* klass,
}
#else
DEREF(memory, zend_object*) = Z_OBJ_P(value);
++GC_REFCOUNT(Z_OBJ_P(value));
GC_ADDREF(Z_OBJ_P(value));
#endif
break;
}
Expand Down Expand Up @@ -428,7 +428,7 @@ void native_slot_get_by_map_value(upb_fieldtype_t type, const void* memory,
ZVAL_ZVAL(CACHED_PTR_TO_ZVAL_PTR(cache), value, 1, 0);
}
#else
++GC_REFCOUNT(*(zend_object**)memory);
GC_ADDREF(*(zend_object**)memory);
ZVAL_OBJ(cache, *(zend_object**)memory);
#endif
return;
Expand Down