fix php_http_locate_bin_eol(()
[m6w6/ext-http] / php_http_curl_client_pool.c
index ea1bace5f1efacd9b6f1b02345e37a84cd073e32..d1873fb5b754e6ad717114c0ec31987c3db974ae 100644 (file)
@@ -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);