Skip to content

Commit

Permalink
Use the new GC API
Browse files Browse the repository at this point in the history
  • Loading branch information
kocsismate committed Apr 27, 2020
1 parent b2ba31e commit 6a1841b
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
35 changes: 33 additions & 2 deletions ext/curl/interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -1270,8 +1270,39 @@ static HashTable *curl_get_gc(zend_object *object, zval **table, int *n)
{
php_curl *curl = curl_from_obj(object);

*table = &curl->postfields;
*n = 1;
zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();

zend_get_gc_buffer_add_zval(gc_buffer, &curl->postfields);
if (curl->handlers) {
if (curl->handlers->read) {
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->read->func_name);
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->read->stream);
}

if (curl->handlers->write) {
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->write->func_name);
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->write->stream);
}

if (curl->handlers->write_header) {
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->write_header->func_name);
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->write_header->stream);
}

if (curl->handlers->progress) {
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->progress->func_name);
}

#if LIBCURL_VERSION_NUM >= 0x071500
if (curl->handlers->fnmatch) {
zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->fnmatch->func_name);
}
#endif

zend_get_gc_buffer_add_zval(gc_buffer, &curl->handlers->std_err);
}

zend_get_gc_buffer_use(gc_buffer, table, n);

return zend_std_get_properties(object);
}
Expand Down
18 changes: 18 additions & 0 deletions ext/curl/multi.c
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,23 @@ void curl_multi_free_obj(zend_object *object)
zend_object_std_dtor(&mh->std);
}

static HashTable *curl_multi_get_gc(zend_object *object, zval **table, int *n)
{
php_curlm *curl_multi = curl_multi_from_obj(object);

zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();

if (curl_multi->handlers) {
if (curl_multi->handlers->server_push) {
zend_get_gc_buffer_add_zval(gc_buffer, &curl_multi->handlers->server_push->func_name);
}
}

zend_get_gc_buffer_use(gc_buffer, table, n);

return zend_std_get_properties(object);
}

void curl_multi_register_class(void) {
zend_class_entry ce_multi;
INIT_CLASS_ENTRY(ce_multi, "CurlMulti", curl_multi_methods);
Expand All @@ -590,6 +607,7 @@ void curl_multi_register_class(void) {
memcpy(&curl_multi_handlers, &std_object_handlers, sizeof(zend_object_handlers));
curl_multi_handlers.offset = XtOffsetOf(php_curlm, std);
curl_multi_handlers.free_obj = curl_multi_free_obj;
curl_multi_handlers.get_gc = curl_multi_get_gc;
curl_multi_handlers.get_constructor = curl_multi_get_constructor;
curl_multi_handlers.clone_obj = NULL;
}
Expand Down

0 comments on commit 6a1841b

Please sign in to comment.