? ext/curl/multi.c.ann Index: ext/curl/multi.c =================================================================== RCS file: /repository/php-src/ext/curl/multi.c,v retrieving revision 1.19.2.3.2.4 diff -u -p -d -r1.19.2.3.2.4 multi.c --- ext/curl/multi.c 15 Sep 2006 15:04:59 -0000 1.19.2.3.2.4 +++ ext/curl/multi.c 4 Oct 2006 17:23:15 -0000 @@ -62,7 +62,7 @@ PHP_FUNCTION(curl_multi_init) mh = ecalloc(1, sizeof(php_curlm)); mh->multi = curl_multi_init(); - zend_llist_init(&mh->easyh, sizeof(zval), (llist_dtor_func_t) NULL, 0); + zend_llist_init(&mh->easyh, sizeof(zval), _php_curl_multi_cleanup_list, 0); ZEND_REGISTER_RESOURCE(return_value, mh, le_curl_multi_handle); } @@ -98,6 +98,27 @@ PHP_FUNCTION(curl_multi_add_handle) } /* }}} */ +void _php_curl_multi_cleanup_list(void *data) /* {{{ */ +{ + zval *z_ch = (zval *)data; + php_curl *ch; + + if (!z_ch) { + return; + } + + ch = (php_curl *) zend_fetch_resource(&z_ch TSRMLS_CC, -1, le_curl_name, NULL, 1, le_curl); + if (!ch) { + return; + } + + if (ch->uses) { + ch->uses--; + } else { + zend_list_delete(Z_LVAL_P(z_ch)); + } +} +/* }}} */ /* Used internally as comparison routine passed to zend_list_del_element */ static int curl_compare_resources( zval *z1, zval **z2 ) Index: ext/curl/php_curl.h =================================================================== RCS file: /repository/php-src/ext/curl/php_curl.h,v retrieving revision 1.44.2.2 diff -u -p -d -r1.44.2.2 php_curl.h --- ext/curl/php_curl.h 24 Jan 2006 20:11:14 -0000 1.44.2.2 +++ ext/curl/php_curl.h 4 Oct 2006 17:23:15 -0000 @@ -138,6 +138,7 @@ typedef struct { } php_curlm; void _php_curl_cleanup_handle(php_curl *); +void _php_curl_multi_cleanup_list(void *data); /* streams support */