Skip to content

Commit 6a1841b

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

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

ext/curl/interface.c

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,8 +1270,39 @@ 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+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->write_header->stream);
1290+
}
1291+
1292+
if (curl->handlers->progress) {
1293+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->progress->func_name);
1294+
}
1295+
1296+
#if LIBCURL_VERSION_NUM >= 0x071500
1297+
if (curl->handlers->fnmatch) {
1298+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->fnmatch->func_name);
1299+
}
1300+
#endif
1301+
1302+
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->std_err);
1303+
}
1304+
1305+
zend_get_gc_buffer_use(gc_buffer, table, n);
12751306

12761307
return zend_std_get_properties(object);
12771308
}

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)