X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_pool_api.c;h=cca4fbaf0241b5d2a661b99711b6ba0c41f322d6;hp=b78e354174ab5e358195a662bd265499cd123bfe;hb=9d4113f62a7a8fe2fe3879b94a3712d11cec8726;hpb=b0919f33875667baecb05888fba006d5652d68d1 diff --git a/http_request_pool_api.c b/http_request_pool_api.c index b78e354..cca4fba 100644 --- a/http_request_pool_api.c +++ b/http_request_pool_api.c @@ -55,14 +55,12 @@ PHP_HTTP_API http_request_pool *_http_request_pool_init(http_request_pool *pool pool->ch = NULL; } + HTTP_CHECK_CURL_INIT(pool->ch, curl_multi_init(), ;); if (!pool->ch) { - if (!(pool->ch = curl_multi_init())) { - http_error(HE_WARNING, HTTP_E_REQUEST, "Could not initialize curl"); - if (free_pool) { - efree(pool); - } - return NULL; + if (free_pool) { + efree(pool); } + return NULL; } pool->unfinished = 0; @@ -168,14 +166,23 @@ PHP_HTTP_API void _http_request_pool_detach_all(http_request_pool *pool TSRMLS_D for (handle = zend_llist_get_first_ex(&pool->handles, &pos); handle; handle = zend_llist_get_next_ex(&pool->handles, &pos)) { handles[i++] = *handle; } + /* should never happen */ + if (i != count) { + zend_error(E_ERROR, "number of fetched request handles do not match overall count"); + count = i; + } for (i = 0; i < count; ++i) { http_request_pool_detach(pool, handles[i]); } efree(handles); } +#if HTTP_DEBUG_REQPOOLS + fprintf(stderr, "Destroying %d request bodies of pool %p\n", zend_llist_count(&pool->bodies), pool); +#endif + /* free created bodies too */ + zend_llist_clean(&pool->bodies); } - /* {{{ STATUS http_request_pool_send(http_request_pool *) */ PHP_HTTP_API STATUS _http_request_pool_send(http_request_pool *pool TSRMLS_DC) { @@ -183,9 +190,6 @@ PHP_HTTP_API STATUS _http_request_pool_send(http_request_pool *pool TSRMLS_DC) fprintf(stderr, "Attempt to send %d requests of pool %p\n", zend_llist_count(&pool->handles), pool); #endif while (http_request_pool_perform(pool)) { -#if HTTP_DEBUG_REQPOOLS - fprintf(stderr, "> %d unfinished requests of pool %p remaining\n", pool->unfinished, pool); -#endif if (SUCCESS != http_request_pool_select(pool)) { #ifdef PHP_WIN32 http_error(HE_WARNING, HTTP_E_SOCKET, WSAGetLastError()); @@ -197,6 +201,17 @@ PHP_HTTP_API STATUS _http_request_pool_send(http_request_pool *pool TSRMLS_DC) } #if HTTP_DEBUG_REQPOOLS fprintf(stderr, "Finished sending %d HttpRequests of pool %p (still unfinished: %d)\n", zend_llist_count(&pool->handles), pool, pool->unfinished); + { + int remaining = 0; + CURLMsg *msg; + /* + * FIXXME: populate --somehow + */ + do { + if (msg = curl_multi_info_read(pool->ch, &remaining)) + fprintf(stderr, "CURL: %s (%d)\n", curl_easy_strerror(msg->data.result), msg->data.result); + } while (remaining); + } #endif zend_llist_apply(&pool->handles, (llist_apply_func_t) http_request_pool_responsehandler TSRMLS_CC); return SUCCESS;