X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_curl_client_pool.c;h=d1873fb5b754e6ad717114c0ec31987c3db974ae;hb=7bcfee9d63fd596119c5ba29f6f2e193f34e0f45;hp=61a00f17a7f6b3597c63a057d1abdc3b924a39cc;hpb=eebe0f3e8947ecb407451d20aef0611cfcedfdac;p=m6w6%2Fext-http diff --git a/php_http_curl_client_pool.c b/php_http_curl_client_pool.c index 61a00f1..d1873fb 100644 --- a/php_http_curl_client_pool.c +++ b/php_http_curl_client_pool.c @@ -281,6 +281,11 @@ static STATUS php_http_curl_client_pool_attach(php_http_client_pool_t *h, php_ht CURLMcode rs; TSRMLS_FETCH_FROM_CTX(h->ts); + if (r->ops != php_http_curl_client_get_ops()) { + php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT_POOL, "Cannot attach a non-curl client to this pool"); + return FAILURE; + } + if (SUCCESS != php_http_curl_client_prepare(r, m)) { return FAILURE; } @@ -298,10 +303,15 @@ static STATUS php_http_curl_client_pool_detach(php_http_client_pool_t *h, php_ht { php_http_curl_client_pool_t *curl = h->ctx; php_http_curl_client_t *recurl = r->ctx; - CURLMcode rs = curl_multi_remove_handle(curl->handle, recurl->handle); + CURLMcode rs; TSRMLS_FETCH_FROM_CTX(h->ts); - if (CURLM_OK == rs) { + if (r->ops != php_http_curl_client_get_ops()) { + php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT_POOL, "Cannot attach a non-curl client to this pool"); + return FAILURE; + } + + if (CURLM_OK == (rs = curl_multi_remove_handle(curl->handle, recurl->handle))) { return SUCCESS; } else { php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT_POOL, "Could not detach request from pool: %s", curl_multi_strerror(rs)); @@ -460,11 +470,6 @@ static php_http_resource_factory_ops_t php_http_curlm_resource_factory_ops = { php_http_curlm_dtor }; -static zend_class_entry *get_class_entry(void) -{ - return php_http_curl_client_pool_class_entry; -} - static php_http_client_pool_ops_t php_http_curl_client_pool_ops = { &php_http_curlm_resource_factory_ops, php_http_curl_client_pool_init, @@ -478,7 +483,7 @@ static php_http_client_pool_ops_t php_http_curl_client_pool_ops = { php_http_curl_client_pool_detach, php_http_curl_client_pool_setopt, (php_http_new_t) php_http_curl_client_pool_object_new_ex, - get_class_entry + php_http_curl_client_pool_get_class_entry }; PHP_HTTP_API php_http_client_pool_ops_t *php_http_curl_client_pool_get_ops(void) @@ -492,8 +497,14 @@ PHP_HTTP_API php_http_client_pool_ops_t *php_http_curl_client_pool_get_ops(void) #define PHP_HTTP_CURL_ALIAS(method, func) PHP_HTTP_STATIC_ME_ALIAS(method, func, PHP_HTTP_ARGS(HttpClientCURL, method)) #define PHP_HTTP_CURL_MALIAS(me, al, vis) ZEND_FENTRY(me, ZEND_MN(HttpClientCURL_##al), PHP_HTTP_ARGS(HttpClientCURL, al), vis) -zend_class_entry *php_http_curl_client_pool_class_entry; -zend_function_entry php_http_curl_client_pool_method_entry[] = { +static zend_class_entry *php_http_curl_client_pool_class_entry; + +zend_class_entry *php_http_curl_client_pool_get_class_entry(void) +{ + return php_http_curl_client_pool_class_entry; +} + +static zend_function_entry php_http_curl_client_pool_method_entry[] = { EMPTY_FUNCTION_ENTRY }; @@ -509,7 +520,11 @@ zend_object_value php_http_curl_client_pool_object_new_ex(zend_class_entry *ce, o = ecalloc(1, sizeof(php_http_client_pool_object_t)); zend_object_std_init((zend_object *) o, ce TSRMLS_CC); +#if PHP_VERSION_ID < 50339 + zend_hash_copy(((zend_object *) o)->properties, &(ce->default_properties), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval*)); +#else object_properties_init((zend_object *) o, ce); +#endif if (!(o->pool = p)) { o->pool = php_http_client_pool_init(NULL, &php_http_curl_client_pool_ops, NULL, NULL TSRMLS_CC);