wininet: Remove the custom thread pool implementation and use
QueueUserWorkItem instead.
Jacek Caban
jacek at codeweavers.com
Thu Jan 4 14:18:41 CST 2007
Hi Rob,
Robert Shearman wrote:
> ---
> dlls/wininet/internet.c | 184
> +++++------------------------------------------
> dlls/wininet/internet.h | 3 -
> 2 files changed, 19 insertions(+), 168 deletions(-)
>
> This also fixes a bug in the old code where starting a new
> asynchronous operation with more than 10 asynchronous operations in
> progress would fail.
...
> - LPWORKREQUEST lpRequest = NULL;
> + LPWORKREQUEST lpRequest = lpvParam;
> + WORKREQUEST workRequest;
>
> TRACE("\n");
>
> - EnterCriticalSection(&csQueue);
> + memcpy(&workRequest, lpRequest, sizeof(WORKREQUEST));
> + HeapFree(GetProcessHeap(), 0, lpRequest);
>
> - if (lpHeadWorkQueue)
> - {
> - lpRequest = lpHeadWorkQueue;
> - lpHeadWorkQueue = lpHeadWorkQueue->prev;
> - if (lpRequest == lpWorkQueueTail)
> - lpWorkQueueTail = lpHeadWorkQueue;
> - }
> -
> - LeaveCriticalSection(&csQueue);
> -
> - if (lpRequest)
> - {
> - memcpy(lpWorkRequest, lpRequest, sizeof(WORKREQUEST));
> - HeapFree(GetProcessHeap(), 0, lpRequest);
> - bSuccess = TRUE;
> - InterlockedDecrement(&dwNumJobs);
> - }
> + workRequest.asyncproc(&workRequest);
>
> - return bSuccess;
> + WININET_Release( workRequest.hdr );
> + return TRUE;
> }
>
Why do you copy lpRequest to workRequest? You could use lpRequest
in asyncproc and WININET_Release and call HeapFree before return.
Then workRequest may be removed.
Thanks,
Jacek
More information about the wine-devel
mailing list