- Countable also requires PHP-5.1+
[m6w6/ext-http] / http_request_pool_api.c
index 34bc1cb2d8f381d56eb9ebfc4980c7fbdc2b5beb..188bb9d326aea647f94dd678ea8463ef33c8e973 100644 (file)
@@ -103,7 +103,6 @@ PHP_HTTP_API STATUS _http_request_pool_attach(http_request_pool *pool, zval *req
                                zend_llist_add_element(&pool->bodies, &body);
 
                                ZVAL_ADDREF(request);
-                               Z_OBJ_ADDREF_P(request);
 
 #if HTTP_DEBUG_REQPOOLS
                                fprintf(stderr, "> %d HttpRequests attached to pool %p\n", zend_llist_count(&pool->handles), pool);
@@ -239,6 +238,12 @@ PHP_HTTP_API void _http_request_pool_dtor(http_request_pool *pool TSRMLS_DC)
 }
 /* }}} */
 
+#ifdef PHP_WIN32
+#      define SELECT_ERROR SOCKET_ERROR
+#else
+#      define SELECT_ERROR -1
+#endif
+
 /* {{{ STATUS http_request_pool_select(http_request_pool *) */
 PHP_HTTP_API STATUS _http_request_pool_select(http_request_pool *pool)
 {
@@ -250,8 +255,12 @@ PHP_HTTP_API STATUS _http_request_pool_select(http_request_pool *pool)
        FD_ZERO(&W);
        FD_ZERO(&E);
 
-       curl_multi_fdset(pool->ch, &R, &W, &E, &MAX);
-       return (-1 != select(MAX + 1, &R, &W, &E, &timeout)) ? SUCCESS : FAILURE;
+       if (CURLM_OK == curl_multi_fdset(pool->ch, &R, &W, &E, &MAX)) {
+               if (MAX == -1 || SELECT_ERROR != select(MAX + 1, &R, &W, &E, &timeout)) {
+                       return SUCCESS;
+               }
+       }
+       return FAILURE;
 }
 /* }}} */
 
@@ -265,11 +274,9 @@ PHP_HTTP_API int _http_request_pool_perform(http_request_pool *pool TSRMLS_DC)
        
        while (msg = curl_multi_info_read(pool->ch, &remaining)) {
                if (CURLMSG_DONE == msg->msg) {
-
-#if HTTP_DEBUG_REQPOOLS
-                       fprintf(stderr, "Done CURL handle: %p (remaining: %d)\n", msg->easy_handle, remaining);
-#endif
-                       
+                       if (CURLE_OK != msg->data.result) {
+                               http_error(HE_WARNING, HTTP_E_REQUEST, curl_easy_strerror(msg->data.result));
+                       }
                        zend_llist_apply_with_argument(&pool->handles, (llist_apply_with_arg_func_t) http_request_pool_responsehandler, msg->easy_handle TSRMLS_CC);
                }
        }
@@ -302,7 +309,6 @@ void _http_request_pool_responsehandler(zval **req, CURL *ch TSRMLS_DC)
 #endif
                
                ZVAL_ADDREF(*req);
-               Z_OBJ_ADDREF_PP(req);
                zend_llist_add_element(&obj->pool->finished, req);
                http_request_object_responsehandler(obj, *req);
        }