]> granicus.if.org Git - php/commitdiff
Improve resource management for curl handle
authorPierrick Charron <pierrick@php.net>
Sat, 5 Jan 2013 16:07:59 +0000 (11:07 -0500)
committerPierrick Charron <pierrick@php.net>
Sat, 5 Jan 2013 16:07:59 +0000 (11:07 -0500)
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.

ext/curl/interface.c
ext/curl/multi.c
ext/curl/php_curl.h

index e0c95efed52ad8eaf628ce9f29671676ba16496b..2e055811e371a400b5481e32a59c8799e485c48e 100644 (file)
@@ -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));
 }
 /* }}} */
 
index d84669a772474d963d68901982b90949c1eac55b..af78651ba16ef130ccd5760660db42cd0303abf1 100644 (file)
@@ -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));
+
 }
 /* }}} */
 
index 5c24fc13027106f1f9d3ceb513b7d27adcdf5bc5..a8c26c05288a3bfa193d5b27ef5eda76b24938ed 100644 (file)
@@ -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;