X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_requestpool_object.c;h=58aec24d561a0cc4e52dcbbfc773d6a05799e313;hb=c18bf30da36029eabb2367c0751cb763d67eb6b0;hp=f4f0f9918359b71208561205ff763f37631e764b;hpb=1f4974565dc58da9c7bfbde278896a5e06e9d669;p=m6w6%2Fext-http diff --git a/http_requestpool_object.c b/http_requestpool_object.c index f4f0f99..58aec24 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" @@ -93,10 +94,11 @@ zend_function_entry http_requestpool_object_fe[] = { }; static zend_object_handlers http_requestpool_object_handlers; -void _http_requestpool_object_init(INIT_FUNC_ARGS) +PHP_MINIT_FUNCTION(http_requestpool_object) { HTTP_REGISTER_CLASS_EX(HttpRequestPool, http_requestpool_object, NULL, 0); zend_class_implements(http_requestpool_object_ce TSRMLS_CC, 1, zend_ce_iterator); + return SUCCESS; } zend_object_value _http_requestpool_object_new(zend_class_entry *ce TSRMLS_DC) @@ -217,7 +219,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 +245,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 +275,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 +366,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)); } } /* }}} */