summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierrick Charron <pierrick@php.net>2013-01-05 11:07:59 -0500
committerPierrick Charron <pierrick@php.net>2013-01-05 11:07:59 -0500
commitf85e5950ab4552799c119cd1d23617535ed19e61 (patch)
treedffa4a4f032026df02d3a1baac9f7afacac84938
parentc4f2a20f150c6e2b453cdd16f5ca1715ab150f7a (diff)
downloadphp-git-f85e5950ab4552799c119cd1d23617535ed19e61.tar.gz
Improve resource management for curl handle
Previous implementation was using its own refcounting (uses field of the php_curl struct). zend_list_add/remove already implements its own refcount, so we don't need to use an other one.
-rw-r--r--ext/curl/interface.c11
-rw-r--r--ext/curl/multi.c13
-rw-r--r--ext/curl/php_curl.h1
3 files changed, 6 insertions, 19 deletions
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index e0c95efed5..2e055811e3 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -1952,8 +1952,6 @@ PHP_FUNCTION(curl_init)
ch->handlers->read->method = PHP_CURL_DIRECT;
ch->handlers->write_header->method = PHP_CURL_IGNORE;
- ch->uses = 0;
-
MAKE_STD_ZVAL(clone);
ch->clone = clone;
@@ -1995,8 +1993,7 @@ PHP_FUNCTION(curl_copy_handle)
TSRMLS_SET_CTX(dupch->thread_ctx);
dupch->cp = cp;
- dupch->uses = 0;
- ch->uses++;
+ zend_list_addref(Z_LVAL_P(zid));
if (ch->handlers->write->stream) {
Z_ADDREF_P(ch->handlers->write->stream);
}
@@ -3210,11 +3207,7 @@ PHP_FUNCTION(curl_close)
return;
}
- if (ch->uses) {
- ch->uses--;
- } else {
- zend_list_delete(Z_LVAL_P(zid));
- }
+ zend_list_delete(Z_LVAL_P(zid));
}
/* }}} */
diff --git a/ext/curl/multi.c b/ext/curl/multi.c
index d84669a772..af78651ba1 100644
--- a/ext/curl/multi.c
+++ b/ext/curl/multi.c
@@ -86,7 +86,6 @@ PHP_FUNCTION(curl_multi_add_handle)
ZEND_FETCH_RESOURCE(ch, php_curl *, &z_ch, -1, le_curl_name, le_curl);
_php_curl_cleanup_handle(ch);
- ch->uses++;
/* we want to create a copy of this zval that we store in the multihandle structure element "easyh" */
tmp_val = *z_ch;
@@ -113,11 +112,7 @@ void _php_curl_multi_cleanup_list(void *data) /* {{{ */
return;
}
- if (ch->uses) {
- ch->uses--;
- } else {
- zend_list_delete(Z_LVAL_P(z_ch));
- }
+ zend_list_delete(Z_LVAL_P(z_ch));
}
/* }}} */
@@ -146,12 +141,12 @@ PHP_FUNCTION(curl_multi_remove_handle)
ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle);
ZEND_FETCH_RESOURCE(ch, php_curl *, &z_ch, -1, le_curl_name, le_curl);
- --ch->uses;
+
+ RETVAL_LONG((long) curl_multi_remove_handle(mh->multi, ch->cp));
zend_llist_del_element( &mh->easyh, &z_ch,
(int (*)(void *, void *)) curl_compare_resources );
-
- RETURN_LONG((long) curl_multi_remove_handle(mh->multi, ch->cp));
+
}
/* }}} */
diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h
index 5c24fc1302..a8c26c0528 100644
--- a/ext/curl/php_curl.h
+++ b/ext/curl/php_curl.h
@@ -169,7 +169,6 @@ typedef struct {
CURL *cp;
php_curl_handlers *handlers;
long id;
- unsigned int uses;
zend_bool in_callback;
zval *clone;
} php_curl;