X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_curl_client_pool.c;h=d1873fb5b754e6ad717114c0ec31987c3db974ae;hb=3d6119e310337b4453b30312ea65613208493cd3;hp=ea1bace5f1efacd9b6f1b02345e37a84cd073e32;hpb=bd80b17b026a00a254ee8693cd7bacf1ebdec4cf;p=m6w6%2Fext-http diff --git a/php_http_curl_client_pool.c b/php_http_curl_client_pool.c index ea1bace..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)); @@ -510,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);