- disallow detaching requests while executing progress callbacks
[m6w6/ext-http] / http_requestpool_object.c
index c49edc559f7c35ce4dee6073f52cf963d8dc9204..69c3f9616a0ade832514f9e38e153d90d61c2655 100644 (file)
@@ -121,7 +121,7 @@ zend_object_value _http_requestpool_object_new(zend_class_entry *ce TSRMLS_DC)
        http_request_pool_init(&o->pool);
 
        ALLOC_HASHTABLE(OBJ_PROP(o));
-       zend_hash_init(OBJ_PROP(o), 0, NULL, ZVAL_PTR_DTOR, 0);
+       zend_hash_init(OBJ_PROP(o), zend_hash_num_elements(&ce->default_properties), NULL, ZVAL_PTR_DTOR, 0);
        zend_hash_copy(OBJ_PROP(o), &ce->default_properties, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
 
        ov.handle = putObject(http_requestpool_object, o);
@@ -134,12 +134,8 @@ void _http_requestpool_object_free(zend_object *object TSRMLS_DC)
 {
        http_requestpool_object *o = (http_requestpool_object *) object;
 
-       if (OBJ_PROP(o)) {
-               zend_hash_destroy(OBJ_PROP(o));
-               FREE_HASHTABLE(OBJ_PROP(o));
-       }
        http_request_pool_dtor(&o->pool);
-       efree(o);
+       freeObject(o);
 }
 
 #define http_requestpool_object_llist2array _http_requestpool_object_llist2array
@@ -198,15 +194,13 @@ PHP_METHOD(HttpRequestPool, __construct)
 
                for (i = 0; i < argc; ++i) {
                        if (Z_TYPE_PP(argv[i]) == IS_OBJECT && instanceof_function(Z_OBJCE_PP(argv[i]), http_request_object_ce TSRMLS_CC)) {
-                               http_request_pool_try {
-                                       http_request_pool_attach(&obj->pool, *(argv[i]));
-                               } http_request_pool_catch();
+                               http_request_pool_attach(&obj->pool, *(argv[i]));
                        }
                }
-               http_request_pool_final();
        }
        efree(argv);
        SET_EH_NORMAL();
+       http_final(HTTP_EX_CE(request_pool));
 }
 /* }}} */
 
@@ -315,6 +309,9 @@ PHP_METHOD(HttpRequestPool, send)
        SET_EH_THROW_HTTP();
        status = http_request_pool_send(&obj->pool);
        SET_EH_NORMAL();
+       
+       /* rethrow as HttpRequestPoolException */
+       http_final(HTTP_EX_CE(request_pool));
 
        RETURN_SUCCESS(status);
 }
@@ -391,7 +388,7 @@ PHP_METHOD(HttpRequestPool, valid)
 {
        NO_ARGS;
 
-       IF_RETVAL_USED {
+       if (return_value_used) {
                getObject(http_requestpool_object, obj);
                RETURN_BOOL(obj->iterator.pos >= 0 && obj->iterator.pos < zend_llist_count(&obj->pool.handles));
        }
@@ -406,7 +403,7 @@ PHP_METHOD(HttpRequestPool, current)
 {
        NO_ARGS;
 
-       IF_RETVAL_USED {
+       if (return_value_used) {
                long pos = 0;
                zval **current = NULL;
                zend_llist_position lpos;
@@ -433,7 +430,7 @@ PHP_METHOD(HttpRequestPool, key)
 {
        NO_ARGS;
 
-       IF_RETVAL_USED {
+       if (return_value_used) {
                getObject(http_requestpool_object, obj);
                RETURN_LONG(obj->iterator.pos);
        }