Commit:    f85e5950ab4552799c119cd1d23617535ed19e61
Author:    Pierrick Charron <pierr...@php.net>         Sat, 5 Jan 2013 11:07:59 
-0500
Parents:   c4f2a20f150c6e2b453cdd16f5ca1715ab150f7a
Branches:  PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=f85e5950ab4552799c119cd1d23617535ed19e61

Log:
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.

Changed paths:
  M  ext/curl/interface.c
  M  ext/curl/multi.c
  M  ext/curl/php_curl.h


Diff:
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index e0c95ef..2e05581 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 d84669a..af78651 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 5c24fc1..a8c26c0 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;


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to