Skip to content

Commit 263b20c

Browse files
committed
Add custom gc handlers
1 parent 7d477cc commit 263b20c

20 files changed

+28
-8
lines changed

php_phongo.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,13 +155,6 @@ static zend_class_entry* php_phongo_fetch_internal_class(const char* class_name,
155155
return NULL;
156156
}
157157

158-
static HashTable* php_phongo_std_get_gc(zend_object* object, zval** table, int* n)
159-
{
160-
*table = NULL;
161-
*n = 0;
162-
return object->handlers->get_properties(object);
163-
}
164-
165158

166159
PHP_MINIT_FUNCTION(mongodb) /* {{{ */
167160
{
@@ -198,7 +191,6 @@ PHP_MINIT_FUNCTION(mongodb) /* {{{ */
198191
/* Disable cloning by default. Individual classes can opt in if they need to
199192
* support this (e.g. BSON objects). */
200193
phongo_std_object_handlers.clone_obj = NULL;
201-
phongo_std_object_handlers.get_gc = php_phongo_std_get_gc;
202194

203195
/* Initialize zend_class_entry dependencies.
204196
*

php_phongo.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,16 @@ zend_object_handlers* phongo_get_std_object_handlers(void);
9393
} while (0)
9494

9595
#define PHONGO_GET_PROPERTY_HANDLERS(_name, _intern_extractor) \
96+
PHONGO_GET_PROPERTY_HANDLERS_NO_GC(_name, _intern_extractor) \
97+
\
98+
static HashTable* php_phongo_##_name##_get_gc(zend_object* zobj, zval** table, int* n) \
99+
{ \
100+
*table = NULL; \
101+
*n = 0; \
102+
return _intern_extractor(zobj)->php_properties; \
103+
}
104+
105+
#define PHONGO_GET_PROPERTY_HANDLERS_NO_GC(_name, _intern_extractor) \
96106
static zval* php_phongo_##_name##_read_property(zend_object *zobj, zend_string *member, int type, void **cache_slot, zval *rv) \
97107
{ \
98108
HashTable *props = _intern_extractor(zobj)->php_properties; \

src/BSON/Binary.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ void php_phongo_binary_init_ce(INIT_FUNC_ARGS)
305305
php_phongo_handler_binary.has_property = php_phongo_binary_has_property;
306306
php_phongo_handler_binary.unset_property = php_phongo_binary_unset_property;
307307
php_phongo_handler_binary.get_property_ptr_ptr = php_phongo_binary_get_property_ptr_ptr;
308+
php_phongo_handler_binary.get_gc = php_phongo_binary_get_gc;
308309
php_phongo_handler_binary.free_obj = php_phongo_binary_free_object;
309310
php_phongo_handler_binary.offset = XtOffsetOf(php_phongo_binary_t, std);
310311
}

src/BSON/DBPointer.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ void php_phongo_dbpointer_init_ce(INIT_FUNC_ARGS)
265265
php_phongo_handler_dbpointer.has_property = php_phongo_dbpointer_has_property;
266266
php_phongo_handler_dbpointer.unset_property = php_phongo_dbpointer_unset_property;
267267
php_phongo_handler_dbpointer.get_property_ptr_ptr = php_phongo_dbpointer_get_property_ptr_ptr;
268+
php_phongo_handler_dbpointer.get_gc = php_phongo_dbpointer_get_gc;
268269
php_phongo_handler_dbpointer.free_obj = php_phongo_dbpointer_free_object;
269270
php_phongo_handler_dbpointer.offset = XtOffsetOf(php_phongo_dbpointer_t, std);
270271
}

src/BSON/Decimal128.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ void php_phongo_decimal128_init_ce(INIT_FUNC_ARGS)
239239
php_phongo_handler_decimal128.has_property = php_phongo_decimal128_has_property;
240240
php_phongo_handler_decimal128.unset_property = php_phongo_decimal128_unset_property;
241241
php_phongo_handler_decimal128.get_property_ptr_ptr = php_phongo_decimal128_get_property_ptr_ptr;
242+
php_phongo_handler_decimal128.get_gc = php_phongo_decimal128_get_gc;
242243
php_phongo_handler_decimal128.free_obj = php_phongo_decimal128_free_object;
243244
php_phongo_handler_decimal128.offset = XtOffsetOf(php_phongo_decimal128_t, std);
244245
}

src/BSON/Int64.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ void php_phongo_int64_init_ce(INIT_FUNC_ARGS)
578578
php_phongo_handler_int64.has_property = php_phongo_int64_has_property;
579579
php_phongo_handler_int64.unset_property = php_phongo_int64_unset_property;
580580
php_phongo_handler_int64.get_property_ptr_ptr = php_phongo_int64_get_property_ptr_ptr;
581+
php_phongo_handler_int64.get_gc = php_phongo_int64_get_gc;
581582
php_phongo_handler_int64.free_obj = php_phongo_int64_free_object;
582583
php_phongo_handler_int64.offset = XtOffsetOf(php_phongo_int64_t, std);
583584
php_phongo_handler_int64.cast_object = php_phongo_int64_cast_object;

src/BSON/Iterator.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ void php_phongo_iterator_init_ce(INIT_FUNC_ARGS)
401401
php_phongo_handler_iterator.has_property = php_phongo_iterator_has_property;
402402
php_phongo_handler_iterator.unset_property = php_phongo_iterator_unset_property;
403403
php_phongo_handler_iterator.get_property_ptr_ptr = php_phongo_iterator_get_property_ptr_ptr;
404+
php_phongo_handler_iterator.get_gc = php_phongo_iterator_get_gc;
404405
php_phongo_handler_iterator.free_obj = php_phongo_iterator_free_object;
405406
php_phongo_handler_iterator.offset = XtOffsetOf(php_phongo_iterator_t, std);
406407
}

src/BSON/Javascript.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ void php_phongo_javascript_init_ce(INIT_FUNC_ARGS)
346346
php_phongo_handler_javascript.has_property = php_phongo_javascript_has_property;
347347
php_phongo_handler_javascript.unset_property = php_phongo_javascript_unset_property;
348348
php_phongo_handler_javascript.get_property_ptr_ptr = php_phongo_javascript_get_property_ptr_ptr;
349+
php_phongo_handler_javascript.get_gc = php_phongo_javascript_get_gc;
349350
php_phongo_handler_javascript.free_obj = php_phongo_javascript_free_object;
350351
php_phongo_handler_javascript.offset = XtOffsetOf(php_phongo_javascript_t, std);
351352
}

src/BSON/ObjectId.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ void php_phongo_objectid_init_ce(INIT_FUNC_ARGS)
287287
php_phongo_handler_objectid.has_property = php_phongo_objectid_has_property;
288288
php_phongo_handler_objectid.unset_property = php_phongo_objectid_unset_property;
289289
php_phongo_handler_objectid.get_property_ptr_ptr = php_phongo_objectid_get_property_ptr_ptr;
290+
php_phongo_handler_objectid.get_gc = php_phongo_objectid_get_gc;
290291
php_phongo_handler_objectid.free_obj = php_phongo_objectid_free_object;
291292
php_phongo_handler_objectid.offset = XtOffsetOf(php_phongo_objectid_t, std);
292293
}

src/BSON/PackedArray.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@ void php_phongo_packedarray_init_ce(INIT_FUNC_ARGS)
588588
php_phongo_handler_packedarray.has_property = php_phongo_packedarray_has_property;
589589
php_phongo_handler_packedarray.unset_property = php_phongo_packedarray_unset_property;
590590
php_phongo_handler_packedarray.get_property_ptr_ptr = php_phongo_packedarray_get_property_ptr_ptr;
591+
php_phongo_handler_packedarray.get_gc = php_phongo_packedarray_get_gc;
591592
php_phongo_handler_packedarray.free_obj = php_phongo_packedarray_free_object;
592593
php_phongo_handler_packedarray.read_dimension = php_phongo_packedarray_read_dimension;
593594
php_phongo_handler_packedarray.write_dimension = php_phongo_packedarray_write_dimension;

0 commit comments

Comments
 (0)