Piotr Caban <piotr(a)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(a)winehq.org