Module: wine Branch: master Commit: 8bf9d8e90d870bc7a3b994864e409554bf4db01e URL: http://source.winehq.org/git/wine.git/?a=commit;h=8bf9d8e90d870bc7a3b994864e...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Sep 3 13:58:30 2012 +0200
urlmon: Process pending tasks before exiting Start function.
---
dlls/urlmon/bindprot.c | 48 ++++++++++++++++++++++++++++-------------------- 1 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c index 603002d..48c9130 100644 --- a/dlls/urlmon/bindprot.c +++ b/dlls/urlmon/bindprot.c @@ -34,32 +34,38 @@ struct _task_header_t { #define WM_MK_CONTINUE (WM_USER+101) #define WM_MK_RELEASE (WM_USER+102)
-static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +static void process_tasks(BindProtocol *This) { - switch(msg) { - case WM_MK_CONTINUE: { - BindProtocol *This = (BindProtocol*)lParam; - task_header_t *task; + task_header_t *task;
- while(1) { - EnterCriticalSection(&This->section); + while(1) { + EnterCriticalSection(&This->section);
- task = This->task_queue_head; - if(task) { - This->task_queue_head = task->next; - if(!This->task_queue_head) - This->task_queue_tail = NULL; - } + task = This->task_queue_head; + if(task) { + This->task_queue_head = task->next; + if(!This->task_queue_head) + This->task_queue_tail = NULL; + }
- LeaveCriticalSection(&This->section); + LeaveCriticalSection(&This->section);
- if(!task) - break; + if(!task) + break;
- This->continue_call++; - task->proc(This, task); - This->continue_call--; - } + This->continue_call++; + task->proc(This, task); + This->continue_call--; + } +} + +static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch(msg) { + case WM_MK_CONTINUE: { + BindProtocol *This = (BindProtocol*)lParam; + + process_tasks(This);
IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface); return 0; @@ -543,6 +549,8 @@ static HRESULT WINAPI BindProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr &This->IInternetBindInfo_iface, 0, 0); }
+ if(SUCCEEDED(hres)) + process_tasks(This); return hres; }