X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_requestpool_object.c;h=dfb9c604f72f6d387f2209e491535f8a3abe1f74;hb=a0098fdbfef71be0fab417b5bc624dc884bd4549;hp=92d13c439319d3fc8a7c563100c538d6344ba759;hpb=fc42cf454f14d7ddd13d34a7b6add61de1bdd1a3;p=m6w6%2Fext-http diff --git a/http_requestpool_object.c b/http_requestpool_object.c index 92d13c4..dfb9c60 100644 --- a/http_requestpool_object.c +++ b/http_requestpool_object.c @@ -24,6 +24,7 @@ #if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL) #include "php_http_std_defs.h" +#include "php_http_api.h" #include "php_http_requestpool_object.h" #include "php_http_request_pool_api.h" #include "php_http_request_object.h" @@ -158,8 +159,8 @@ void _http_requestpool_object_free(zend_object *object TSRMLS_DC) * send(); * foreach($pool as $request) { @@ -217,7 +218,8 @@ PHP_METHOD(HttpRequestPool, reset) getObject(http_requestpool_object, obj); NO_ARGS; - + + obj->iterator.pos = 0; http_request_pool_detach_all(&obj->pool); } @@ -242,7 +244,11 @@ PHP_METHOD(HttpRequestPool, attach) SET_EH_THROW_HTTP(); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &request, http_request_object_ce)) { - status = http_request_pool_attach(&obj->pool, request); + if (obj->iterator.pos > 0 && obj->iterator.pos < zend_llist_count(&obj->pool.handles)) { + http_error(HE_THROW, HTTP_E_REQUEST_POOL, "Cannot attach to the HttpRequestPool while the iterator is active"); + } else { + status = http_request_pool_attach(&obj->pool, request); + } } SET_EH_NORMAL(); RETURN_SUCCESS(status); @@ -268,6 +274,7 @@ PHP_METHOD(HttpRequestPool, detach) SET_EH_THROW_HTTP(); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &request, http_request_object_ce)) { + obj->iterator.pos = -1; status = http_request_pool_detach(&obj->pool, request); } SET_EH_NORMAL(); @@ -358,7 +365,7 @@ PHP_METHOD(HttpRequestPool, valid) IF_RETVAL_USED { getObject(http_requestpool_object, obj); - RETURN_BOOL(obj->iterator.pos < zend_llist_count(&obj->pool.handles)); + RETURN_BOOL(obj->iterator.pos >= 0 && obj->iterator.pos < zend_llist_count(&obj->pool.handles)); } } /* }}} */