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;
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)
{
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());
}
#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;