X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_pool_api.c;h=9abbc3a76bb3ec1fe87b7b1faa1a2b5a448bcd83;hp=0faf2756c13f5fae199891bfd1eb94e73c9d60f6;hb=a24c825ac83a673d31b8c57ec89e9f5667e4668d;hpb=f0d2eafadc9967abd53546c6b7f395ce095255e9 diff --git a/http_request_pool_api.c b/http_request_pool_api.c index 0faf275..9abbc3a 100644 --- a/http_request_pool_api.c +++ b/http_request_pool_api.c @@ -103,7 +103,6 @@ PHP_HTTP_API STATUS _http_request_pool_attach(http_request_pool *pool, zval *req zend_llist_add_element(&pool->bodies, &body); ZVAL_ADDREF(request); - Z_OBJ_ADDREF_P(request); #if HTTP_DEBUG_REQPOOLS fprintf(stderr, "> %d HttpRequests attached to pool %p\n", zend_llist_count(&pool->handles), pool); @@ -121,6 +120,7 @@ PHP_HTTP_API STATUS _http_request_pool_attach(http_request_pool *pool, zval *req /* {{{ STATUS http_request_pool_detach(http_request_pool *, zval *) */ PHP_HTTP_API STATUS _http_request_pool_detach(http_request_pool *pool, zval *request TSRMLS_DC) { + CURLMcode code; getObjectEx(http_request_object, req, request); #if HTTP_DEBUG_REQPOOLS @@ -134,22 +134,18 @@ PHP_HTTP_API STATUS _http_request_pool_detach(http_request_pool *pool, zval *req #endif } else if (req->pool != pool) { http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "HttpRequest object(#%d) is not attached to this HttpRequestPool", Z_OBJ_HANDLE_P(request)); + } else if (CURLM_OK != (code = curl_multi_remove_handle(pool->ch, req->ch))) { + http_error_ex(HE_WARNING, HTTP_E_REQUEST_POOL, "Could not detach HttpRequest object from the HttpRequestPool: %s", curl_multi_strerror(code)); } else { - CURLMcode code; - req->pool = NULL; - zend_llist_del_element(&pool->handles, request, http_request_pool_compare_handles); zend_llist_del_element(&pool->finished, request, http_request_pool_compare_handles); + zend_llist_del_element(&pool->handles, request, http_request_pool_compare_handles); #if HTTP_DEBUG_REQPOOLS fprintf(stderr, "> %d HttpRequests remaining in pool %p\n", zend_llist_count(&pool->handles), pool); #endif - - if (CURLM_OK != (code = curl_multi_remove_handle(pool->ch, req->ch))) { - http_error_ex(HE_WARNING, HTTP_E_REQUEST_POOL, "Could not detach HttpRequest object from the HttpRequestPool: %s", curl_multi_strerror(code)); - } else { - return SUCCESS; - } + + return SUCCESS; } return FAILURE; } @@ -310,7 +306,6 @@ void _http_request_pool_responsehandler(zval **req, CURL *ch TSRMLS_DC) #endif ZVAL_ADDREF(*req); - Z_OBJ_ADDREF_PP(req); zend_llist_add_element(&obj->pool->finished, req); http_request_object_responsehandler(obj, *req); }