Skip to content

Commit e56cb9a

Browse files
committed
Use the new GC API
1 parent b2ba31e commit e56cb9a

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

ext/curl/interface.c

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,8 +1270,38 @@ static HashTable *curl_get_gc(zend_object *object, zval **table, int *n)
12701270
{
12711271
php_curl *curl = curl_from_obj(object);
12721272

1273-
*table = &curl->postfields;
1274-
*n = 1;
1273+
zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
1274+
1275+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->postfields);
1276+
if (curl->handlers) {
1277+
if (curl->handlers->read) {
1278+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->read->func_name);
1279+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->read->stream);
1280+
}
1281+
1282+
if (curl->handlers->write) {
1283+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->write->func_name);
1284+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->write->stream);
1285+
}
1286+
1287+
if (curl->handlers->write_header) {
1288+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->write_header->func_name);
1289+
}
1290+
1291+
if (curl->handlers->progress) {
1292+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->progress->func_name);
1293+
}
1294+
1295+
#if LIBCURL_VERSION_NUM >= 0x071500
1296+
if (curl->handlers->fnmatch) {
1297+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->fnmatch->func_name);
1298+
}
1299+
#endif
1300+
1301+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->std_err);
1302+
}
1303+
1304+
zend_get_gc_buffer_use(gc_buffer, table, n);
12751305

12761306
return zend_std_get_properties(object);
12771307
}

ext/curl/multi.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,23 @@ void curl_multi_free_obj(zend_object *object)
578578
zend_object_std_dtor(&mh->std);
579579
}
580580

581+
static HashTable *curl_multi_get_gc(zend_object *object, zval **table, int *n)
582+
{
583+
php_curlm *curl_multi = curl_multi_from_obj(object);
584+
585+
zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
586+
587+
if (curl_multi->handlers) {
588+
if (curl_multi->handlers->server_push) {
589+
zend_get_gc_buffer_add_zval(gc_buffer, &curl_multi->handlers->server_push->func_name);
590+
}
591+
}
592+
593+
zend_get_gc_buffer_use(gc_buffer, table, n);
594+
595+
return zend_std_get_properties(object);
596+
}
597+
581598
void curl_multi_register_class(void) {
582599
zend_class_entry ce_multi;
583600
INIT_CLASS_ENTRY(ce_multi, "CurlMulti", curl_multi_methods);
@@ -590,6 +607,7 @@ void curl_multi_register_class(void) {
590607
memcpy(&curl_multi_handlers, &std_object_handlers, sizeof(zend_object_handlers));
591608
curl_multi_handlers.offset = XtOffsetOf(php_curlm, std);
592609
curl_multi_handlers.free_obj = curl_multi_free_obj;
610+
curl_multi_handlers.get_gc = curl_multi_get_gc;
593611
curl_multi_handlers.get_constructor = curl_multi_get_constructor;
594612
curl_multi_handlers.clone_obj = NULL;
595613
}

0 commit comments

Comments
 (0)