X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=http_request_api.c;h=3644f9d3fd7816436b3cce2e607cb63c275923d0;hb=e32f6fed32939bba9839c0e4f7cdaec02d8828dd;hp=b41e020b418f8e1d598140d9707c39029c27a358;hpb=2269e8e11a6837fc165ae85406ea6db84c1995cc;p=m6w6%2Fext-http diff --git a/http_request_api.c b/http_request_api.c index b41e020..3644f9d 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -129,9 +129,6 @@ static http_curl_callback_ctx *_http_curl_callback_data(void *data TSRMLS_DC); static void http_request_pool_freebody(http_request_body **body); static void http_request_pool_freehandle(zval **request, http_request_pool *pool TSRMLS_DC); -static void http_request_pool_responsehandler(zval **req TSRMLS_DC); -static inline STATUS http_request_pool_select(http_request_pool *pool); -static inline void http_request_pool_perform(http_request_pool *pool); #if HTTP_CURL_USE_ZEND_MM static void http_curl_free(void *p) { efree(p); } @@ -906,8 +903,7 @@ PHP_HTTP_API STATUS _http_request_pool_send(http_request_pool *pool TSRMLS_DC) #if HTTP_DEBUG_REQPOOLS fprintf(stderr, "Attempt to send requests of pool %p\n", pool); #endif - http_request_pool_perform(pool); - while (pool->unfinished) { + while (http_request_pool_perform(pool)) { #if HTTP_DEBUG_REQPOOLS fprintf(stderr, "%d unfinished requests of pool %p remaining\n", pool->unfinished, pool); #endif @@ -915,7 +911,6 @@ PHP_HTTP_API STATUS _http_request_pool_send(http_request_pool *pool TSRMLS_DC) http_error(E_WARNING, HTTP_E_CURL, "Socket error"); return FAILURE; } - http_request_pool_perform(pool); } zend_llist_apply(&pool->handles, (llist_apply_func_t) http_request_pool_responsehandler TSRMLS_CC); return SUCCESS; @@ -935,31 +930,32 @@ PHP_HTTP_API void _http_request_pool_dtor(http_request_pool *pool TSRMLS_DC) } /* }}} */ -/*#*/ - -/* {{{ static void http_request_pool_freebody(http_request_body **) */ -static void http_request_pool_freebody(http_request_body **body) +/* {{{ STATUS http_request_pool_select(http_request_pool *) */ +PHP_HTTP_API STATUS _http_request_pool_select(http_request_pool *pool) { - TSRMLS_FETCH(); - http_request_body_free(*body); + int MAX; + fd_set R, W, E; + struct timeval timeout = {1, 0}; + + FD_ZERO(&R); + 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; } /* }}} */ -/* {{{ static void http_request_pool_freehandle(zval **, http_request_pool *) */ -static void http_request_pool_freehandle(zval **request, http_request_pool *pool TSRMLS_DC) +/* {{{ int http_request_pool_perform(http_request_pool *) */ +PHP_HTTP_API int _http_request_pool_perform(http_request_pool *pool) { - getObjectEx(http_request_object, req, *request); - if (req->pool) { - http_request_pool_detach(pool, *request); - } -#if HTTP_DEBUG_REQPOOLS - else fprintf(stderr, "Request %p (pool: %p) is not (anymore) attached to pool %p\n", req, req->pool, pool); -#endif + while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(pool->ch, &pool->unfinished)); + return pool->unfinished; } /* }}} */ -/* {{{ static void http_request_pool_responsehandler(zval **) */ -static void http_request_pool_responsehandler(zval **req TSRMLS_DC) +/* {{{ void http_request_pool_responsehandler(zval **) */ +void _http_request_pool_responsehandler(zval **req TSRMLS_DC) { getObjectEx(http_request_object, obj, *req); #if HTTP_DEBUG_REQPOOLS @@ -969,26 +965,26 @@ static void http_request_pool_responsehandler(zval **req TSRMLS_DC) } /* }}} */ -/* {{{ static inline STATUS http_request_pool_select(http_request_pool *) */ -static inline STATUS http_request_pool_select(http_request_pool *pool) -{ - int MAX; - fd_set R, W, E; - struct timeval timeout = {1, 0}; - - FD_ZERO(&R); - 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; +/* {{{ static void http_request_pool_freebody(http_request_body **) */ +static void http_request_pool_freebody(http_request_body **body) +{ + TSRMLS_FETCH(); + http_request_body_free(*body); } /* }}} */ -/* {{{ static inline void http_request_pool_perform(http_request_pool *) */ -static inline void http_request_pool_perform(http_request_pool *pool) +/* {{{ static void http_request_pool_freehandle(zval **, http_request_pool *) */ +static void http_request_pool_freehandle(zval **request, http_request_pool *pool TSRMLS_DC) { - while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(pool->ch, &pool->unfinished)); + getObjectEx(http_request_object, req, *request); + if (req->pool) { + http_request_pool_detach(pool, *request); + } +#if HTTP_DEBUG_REQPOOLS + else fprintf(stderr, "Request %p (pool: %p) is not (anymore) attached to pool %p\n", req, req->pool, pool); +#endif } /* }}} */