X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_api.c;h=87d40a01e49e1d47f8c6c335c66a7c25af204c39;hp=eb4d6271aa238326ffd368a760a332e9526e8cc1;hb=96f5c917e43d94f2d5d7f092a09422db6b13f307;hpb=68142ac3f4879edac62d5a43c479721ae71ea014 diff --git a/http_request_api.c b/http_request_api.c index eb4d627..87d40a0 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -114,11 +114,6 @@ static size_t http_curl_read_callback(void *, size_t, size_t, void *); static int http_curl_progress_callback(void *, double, double, double, double); static int http_curl_debug_callback(CURL *, curl_infotype, char *, size_t, void *); -typedef struct { - void ***tsrm_ctx; - void *data; -} http_curl_callback_ctx; - #define HTTP_CURL_CALLBACK_DATA(from, type, var) \ http_curl_callback_ctx *__CTX = (http_curl_callback_ctx *) (from); \ TSRMLS_FETCH_FROM_CTX(__CTX->tsrm_ctx); \ @@ -177,6 +172,12 @@ void *_http_request_data_copy(int type, void *data TSRMLS_DC) return data; } + case COPY_CONTEXT: + { + zend_llist_add_element(&HTTP_G(request).copies.contexts, &data); + return data; + } + default: { return data; @@ -199,6 +200,13 @@ void _http_request_data_free_slist(void *list) } /* }}} */ +/* {{{ _http_request_data_free_context(http_curl_callback_ctx **) */ +void _http_request_data_free_context(void *context) +{ + efree(*((http_curl_callback_ctx **) context)); +} +/* }}} */ + /* {{{ http_request_body *http_request_body_new() */ PHP_HTTP_API http_request_body *_http_request_body_new(TSRMLS_D) { @@ -349,7 +357,7 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const HTTP_CURL_OPT(NOSIGNAL, 1); #endif #if LIBCURL_VERSION_NUM < 0x070c00 - HTTP_CURL_OPT(ERRORBUFFER, HTTP_G(request).curl.error); + HTTP_CURL_OPT(ERRORBUFFER, HTTP_G(request).error); #endif /* progress callback */ @@ -973,7 +981,7 @@ void _http_request_pool_responsehandler(zval **req TSRMLS_DC) #if HTTP_DEBUG_REQPOOLS fprintf(stderr, "Fetching data from request %p of pool %p\n", obj, obj->pool); #endif - http_request_object_responsehandler(obj, *req, NULL); + http_request_object_responsehandler(obj, *req); } /* }}} */ @@ -1065,7 +1073,7 @@ static http_curl_callback_ctx *_http_curl_callback_data(void *data TSRMLS_DC) http_curl_callback_ctx *ctx = emalloc(sizeof(http_curl_callback_ctx)); TSRMLS_SET_CTX(ctx->tsrm_ctx); ctx->data = data; - return ctx; + return http_request_data_copy(COPY_CONTEXT, ctx); } /* }}} */