wininet: Allow HTTPREQ_ReadFileEx read more then one data chunk

Alexandre Julliard julliard at winehq.org
Tue Jun 22 07:06:03 CDT 2010


Piotr Caban <piotr at codeweavers.com> writes:

> +    read = 0;
> +    size = buffers->dwBufferLength;
> +
> +    EnterCriticalSection( &req->read_section );
> +    while(1) {
> +        res = HTTPREQ_Read(req, (char*)buffers->lpvBuffer+read, size-read,
> +                &buffers->dwBufferLength, !(flags & IRF_NO_WAIT));
> +        if(res == ERROR_SUCCESS)
> +            read += buffers->dwBufferLength;
> +        else
> +            break;
> +
> +        if(!req->read_chunked || read==size || req->dwContentLength!=req->dwContentRead
> +                || !req->dwContentLength || (req->gzip_stream && req->gzip_stream->end_of_data))
> +            break;
> +
> +        INTERNET_SendCallback(&req->hdr, req->hdr.dwContext, INTERNET_STATUS_RESPONSE_RECEIVED,
> +                &buffers->dwBufferLength, sizeof(buffers->dwBufferLength));
> +        INTERNET_SendCallback(&req->hdr, req->hdr.dwContext,
> +                INTERNET_STATUS_RECEIVING_RESPONSE, NULL, 0);

Calling the callbacks while holding the critical section is not a good
idea.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list