#include <Zend/zend_interfaces.h>
#include <ext/spl/spl_iterators.h>
-PHP_HTTP_API php_http_request_pool_t *php_http_request_pool_init(php_http_request_pool_t *h, php_http_request_pool_ops_t *ops, void *init_arg TSRMLS_DC)
+PHP_HTTP_API php_http_request_pool_t *php_http_request_pool_init(php_http_request_pool_t *h, php_http_request_pool_ops_t *ops, php_http_resource_factory_t *rf, void *init_arg TSRMLS_DC)
{
php_http_request_pool_t *free_h = NULL;
memset(h, 0, sizeof(*h));
h->ops = ops;
+ h->rf = rf ? rf : php_http_resource_factory_init(NULL, h->ops->rsrc, NULL, NULL);
zend_llist_init(&h->requests.attached, sizeof(zval *), (llist_dtor_func_t) ZVAL_PTR_DTOR, 0);
zend_llist_init(&h->requests.finished, sizeof(zval *), (llist_dtor_func_t) ZVAL_PTR_DTOR, 0);
TSRMLS_SET_CTX(h->ts);
zend_llist_clean(&h->requests.finished);
zend_llist_clean(&h->requests.attached);
+
+ if (h->persistent_handle_id) {
+ zval_ptr_dtor(&h->persistent_handle_id);
+ }
}
PHP_HTTP_API void php_http_request_pool_free(php_http_request_pool_t **h) {
php_http_message_body_t *body = NULL;
php_http_request_object_t *obj = zend_object_store_get_object(request TSRMLS_CC);
- if (SUCCESS != php_http_request_object_requesthandler(obj, request, &m, &url, &body)) {
+ if (SUCCESS != php_http_request_object_requesthandler(obj, request, &m, &url, &body TSRMLS_CC)) {
return FAILURE;
}
if (SUCCESS == h->ops->attach(h, obj->request, m, url, body)) {
PHP_HTTP_API STATUS php_http_request_pool_exec(php_http_request_pool_t *h)
{
- TSRMLS_FETCH_FROM_CTX(h->ts);
-
if (h->ops->exec) {
return h->ops->exec(h);
}
object_properties_init((zend_object *) o, ce);
if (!(o->pool = p)) {
- o->pool = php_http_request_pool_init(NULL, NULL, NULL TSRMLS_CC);
+ o->pool = php_http_request_pool_init(NULL, NULL, NULL, NULL TSRMLS_CC);
}
if (ptr) {
PHP_METHOD(HttpRequestPool, __construct)
{
- with_error_handling(EH_THROW, PHP_HTTP_EX_CE(runtime)) {
+ with_error_handling(EH_THROW, php_http_exception_class_entry) {
zend_parse_parameters_none();
} end_error_handling();
}
PHP_METHOD(HttpRequestPool, attach)
{
- with_error_handling(EH_THROW, PHP_HTTP_EX_CE(runtime)) {
+ with_error_handling(EH_THROW, php_http_exception_class_entry) {
zval *request;
if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &request, php_http_request_class_entry)) {
- with_error_handling(EH_THROW, PHP_HTTP_EX_CE(runtime)) {
+ with_error_handling(EH_THROW, php_http_exception_class_entry) {
php_http_request_pool_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
if (obj->iterator.pos > 0 && obj->iterator.pos < zend_llist_count(&obj->pool->requests.attached)) {
{
RETVAL_FALSE;
- with_error_handling(EH_THROW, PHP_HTTP_EX_CE(runtime)) {
+ with_error_handling(EH_THROW, php_http_exception_class_entry) {
zval *request;
if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &request, php_http_request_class_entry)) {
- with_error_handling(EH_THROW, PHP_HTTP_EX_CE(request_pool)) {
+ with_error_handling(EH_THROW, php_http_exception_class_entry) {
php_http_request_pool_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
obj->iterator.pos = -1;
{
RETVAL_FALSE;
- with_error_handling(EH_THROW, PHP_HTTP_EX_CE(runtime)) {
+ with_error_handling(EH_THROW, php_http_exception_class_entry) {
if (SUCCESS == zend_parse_parameters_none()) {
- with_error_handling(EH_THROW, PHP_HTTP_EX_CE(request_pool)) {
+ with_error_handling(EH_THROW, php_http_exception_class_entry) {
php_http_request_pool_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
php_http_request_pool_exec(obj->pool);
PHP_MINIT_FUNCTION(http_request_pool)
{
- PHP_HTTP_REGISTER_CLASS(http\\request, Pool, http_request_pool, php_http_object_class_entry, 0);
+ PHP_HTTP_REGISTER_CLASS(http\\Request, Pool, http_request_pool, php_http_object_class_entry, 0);
php_http_request_pool_class_entry->create_object = php_http_request_pool_object_new;
memcpy(&php_http_request_pool_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
php_http_request_pool_object_handlers.clone_obj = NULL;
- zend_class_implements(php_http_request_pool_class_entry TSRMLS_CC, 3, spl_ce_Countable, zend_ce_iterator, php_http_fluently_callable_class_entry);
+ zend_class_implements(php_http_request_pool_class_entry TSRMLS_CC, 2, spl_ce_Countable, zend_ce_iterator);
return SUCCESS;
}