diff options
author | Xinchen Hui <laruence@php.net> | 2015-02-02 10:32:26 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2015-02-02 10:32:26 +0800 |
commit | c9e44dc2dfa7ad91fe9253378a49e9f5b057992e (patch) | |
tree | 33d1a1ae0e6d4cbf30385856cae7f058aa27606c | |
parent | bf55a4e22378f8a6518fa33f0c2d76f82f5e182b (diff) | |
download | php-git-c9e44dc2dfa7ad91fe9253378a49e9f5b057992e.tar.gz |
Revert "Revert "Fixed warning "(null)(): supplied resource is not a valid cURL handle resource in Unknown on line 0"""
This reverts commit e78dd7ade2ac5e617bc5f515a04d1e1d87bd53ee.
-rw-r--r-- | ext/curl/multi.c | 12 | ||||
-rw-r--r-- | ext/curl/tests/curl_multi_close_reference.phpt | 20 |
2 files changed, 29 insertions, 3 deletions
diff --git a/ext/curl/multi.c b/ext/curl/multi.c index adab5fa219..e3db38b207 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -105,6 +105,10 @@ void _php_curl_multi_cleanup_list(void *data) /* {{{ */ return; } + if (Z_RES_P(z_ch)->ptr == NULL) { + return; + } + ch = zend_fetch_resource(z_ch, -1, le_curl_name, NULL, 1, le_curl); if (!ch) { return; @@ -341,9 +345,11 @@ void _php_curl_multi_close(zend_resource *rsrc) /* {{{ */ for (pz_ch = (zval *)zend_llist_get_first_ex(&mh->easyh, &pos); pz_ch; pz_ch = (zval *)zend_llist_get_next_ex(&mh->easyh, &pos)) { - - ch = (php_curl *) zend_fetch_resource(pz_ch, -1, le_curl_name, NULL, 1, le_curl); - _php_curl_verify_handlers(ch, 0); + /* ptr is NULL means it already be freed */ + if (Z_RES_P(pz_ch)->ptr) { + ch = (php_curl *) zend_fetch_resource(pz_ch, -1, le_curl_name, NULL, 1, le_curl); + _php_curl_verify_handlers(ch, 0); + } } curl_multi_cleanup(mh->multi); diff --git a/ext/curl/tests/curl_multi_close_reference.phpt b/ext/curl/tests/curl_multi_close_reference.phpt new file mode 100644 index 0000000000..95f565bb28 --- /dev/null +++ b/ext/curl/tests/curl_multi_close_reference.phpt @@ -0,0 +1,20 @@ +--TEST-- +curl_multi_close closed by cleanup functions +--SKIPIF-- +<?php +if (!extension_loaded('curl')) print 'skip'; +?> +--FILE-- +<?php +$mh = curl_multi_init(); +$array = array($mh); +$array[] = &$array; + +curl_multi_add_handle($mh, curl_init()); +curl_multi_add_handle($mh, curl_init()); +curl_multi_add_handle($mh, curl_init()); +curl_multi_add_handle($mh, curl_init()); +echo "okey"; +?> +--EXPECT-- +okey |