X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=http_request_pool_api.c;h=188bb9d326aea647f94dd678ea8463ef33c8e973;hb=d99e874511efaa8053f6fec4dc562a3da8331683;hp=34bc1cb2d8f381d56eb9ebfc4980c7fbdc2b5beb;hpb=e83a7438dc70ed96630887246a1d3aefcf155b1c;p=m6w6%2Fext-http diff --git a/http_request_pool_api.c b/http_request_pool_api.c index 34bc1cb..188bb9d 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); @@ -239,6 +238,12 @@ PHP_HTTP_API void _http_request_pool_dtor(http_request_pool *pool TSRMLS_DC) } /* }}} */ +#ifdef PHP_WIN32 +# define SELECT_ERROR SOCKET_ERROR +#else +# define SELECT_ERROR -1 +#endif + /* {{{ STATUS http_request_pool_select(http_request_pool *) */ PHP_HTTP_API STATUS _http_request_pool_select(http_request_pool *pool) { @@ -250,8 +255,12 @@ PHP_HTTP_API STATUS _http_request_pool_select(http_request_pool *pool) FD_ZERO(&W); FD_ZERO(&E); - curl_multi_fdset(pool->ch, &R, &W, &E, &MAX); - return (-1 != select(MAX + 1, &R, &W, &E, &timeout)) ? SUCCESS : FAILURE; + if (CURLM_OK == curl_multi_fdset(pool->ch, &R, &W, &E, &MAX)) { + if (MAX == -1 || SELECT_ERROR != select(MAX + 1, &R, &W, &E, &timeout)) { + return SUCCESS; + } + } + return FAILURE; } /* }}} */ @@ -265,11 +274,9 @@ PHP_HTTP_API int _http_request_pool_perform(http_request_pool *pool TSRMLS_DC) while (msg = curl_multi_info_read(pool->ch, &remaining)) { if (CURLMSG_DONE == msg->msg) { - -#if HTTP_DEBUG_REQPOOLS - fprintf(stderr, "Done CURL handle: %p (remaining: %d)\n", msg->easy_handle, remaining); -#endif - + if (CURLE_OK != msg->data.result) { + http_error(HE_WARNING, HTTP_E_REQUEST, curl_easy_strerror(msg->data.result)); + } zend_llist_apply_with_argument(&pool->handles, (llist_apply_with_arg_func_t) http_request_pool_responsehandler, msg->easy_handle TSRMLS_CC); } } @@ -302,7 +309,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); }