projects
/
m6w6
/
ext-http
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
This commit was manufactured by cvs2svn to create branch 'R_1_5'.
[m6w6/ext-http]
/
http_request_pool_api.c
diff --git
a/http_request_pool_api.c
b/http_request_pool_api.c
index 5b04472566e05111f51d04e56216dabcc6407561..27e1f0d819e819dd0fa363bcfd04131369397dbd 100644
(file)
--- a/
http_request_pool_api.c
+++ b/
http_request_pool_api.c
@@
-6,7
+6,7
@@
| modification, are permitted provided that the conditions mentioned |
| in the accompanying LICENSE file are met. |
+--------------------------------------------------------------------+
| modification, are permitted provided that the conditions mentioned |
| in the accompanying LICENSE file are met. |
+--------------------------------------------------------------------+
- | Copyright (c) 2004-200
6
, Michael Wallner <mike@php.net> |
+ | Copyright (c) 2004-200
7
, Michael Wallner <mike@php.net> |
+--------------------------------------------------------------------+
*/
+--------------------------------------------------------------------+
*/
@@
-19,6
+19,7
@@
#include "php_http_api.h"
#include "php_http_exception_object.h"
#include "php_http_api.h"
#include "php_http_exception_object.h"
+#include "php_http_persistent_handle_api.h"
#include "php_http_request_api.h"
#include "php_http_request_object.h"
#include "php_http_request_pool_api.h"
#include "php_http_request_api.h"
#include "php_http_request_object.h"
#include "php_http_request_pool_api.h"
@@
-28,12
+29,16
@@
# define HTTP_DEBUG_REQPOOLS 0
#endif
# define HTTP_DEBUG_REQPOOLS 0
#endif
-#ifndef HAVE_CURL_MULTI_STRERROR
-# define curl_multi_strerror(dummy) "unknown error"
-#endif
-
static int http_request_pool_compare_handles(void *h1, void *h2);
static int http_request_pool_compare_handles(void *h1, void *h2);
+PHP_MINIT_FUNCTION(http_request_pool)
+{
+ if (SUCCESS != http_persistent_handle_provide("http_request_pool", curl_multi_init, (http_persistent_handle_dtor) curl_multi_cleanup, NULL)) {
+ return FAILURE;
+ }
+ return SUCCESS;
+}
+
/* {{{ http_request_pool *http_request_pool_init(http_request_pool *) */
PHP_HTTP_API http_request_pool *_http_request_pool_init(http_request_pool *pool TSRMLS_DC)
{
/* {{{ http_request_pool *http_request_pool_init(http_request_pool *) */
PHP_HTTP_API http_request_pool *_http_request_pool_init(http_request_pool *pool TSRMLS_DC)
{
@@
-48,8
+53,7
@@
PHP_HTTP_API http_request_pool *_http_request_pool_init(http_request_pool *pool
pool->ch = NULL;
}
pool->ch = NULL;
}
- HTTP_CHECK_CURL_INIT(pool->ch, curl_multi_init(), ;);
- if (!pool->ch) {
+ if (SUCCESS != http_persistent_handle_acquire("http_request_pool", &pool->ch)) {
if (free_pool) {
efree(pool);
}
if (free_pool) {
efree(pool);
}
@@
-245,7
+249,7
@@
PHP_HTTP_API void _http_request_pool_dtor(http_request_pool *pool TSRMLS_DC)
pool->unfinished = 0;
zend_llist_clean(&pool->finished);
zend_llist_clean(&pool->handles);
pool->unfinished = 0;
zend_llist_clean(&pool->finished);
zend_llist_clean(&pool->handles);
-
curl_multi_cleanup(
pool->ch);
+
http_persistent_handle_release("http_request_pool", &
pool->ch);
}
/* }}} */
}
/* }}} */
@@
-261,13
+265,24
@@
PHP_HTTP_API STATUS _http_request_pool_select(http_request_pool *pool)
int MAX;
fd_set R, W, E;
struct timeval timeout = {1, 0};
int MAX;
fd_set R, W, E;
struct timeval timeout = {1, 0};
+#ifdef HAVE_CURL_MULTI_TIMEOUT
+ long max_tout = 1000;
+
+ if ((CURLM_OK == curl_multi_timeout(pool->ch, &max_tout)) && (max_tout != -1)) {
+ timeout.tv_sec = max_tout / 1000;
+ timeout.tv_usec = (max_tout % 1000) * 1000;
+ }
+#endif
FD_ZERO(&R);
FD_ZERO(&W);
FD_ZERO(&E);
if (CURLM_OK == curl_multi_fdset(pool->ch, &R, &W, &E, &MAX)) {
FD_ZERO(&R);
FD_ZERO(&W);
FD_ZERO(&E);
if (CURLM_OK == curl_multi_fdset(pool->ch, &R, &W, &E, &MAX)) {
- if (MAX == -1 || SELECT_ERROR != select(MAX + 1, &R, &W, &E, &timeout)) {
+ if (MAX == -1) {
+ http_sleep((double) timeout.tv_sec + (double) (timeout.tv_usec / HTTP_MCROSEC));
+ return SUCCESS;
+ } else if (SELECT_ERROR != select(MAX + 1, &R, &W, &E, &timeout)) {
return SUCCESS;
}
}
return SUCCESS;
}
}