Module: wine Branch: refs/heads/master Commit: e6fc0c5dc22e34258383bc033ff86932d35f2abf URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e6fc0c5dc22e34258383bc03...
Author: Jacek Caban jacek@codeweavers.com Date: Wed May 31 19:47:42 2006 +0200
urlmon: Use task queue for cross thread calls in on_progress.
---
dlls/urlmon/binding.c | 52 +++++++------------------------------------------ 1 files changed, 7 insertions(+), 45 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c index 93ff949..c70364e 100644 --- a/dlls/urlmon/binding.c +++ b/dlls/urlmon/binding.c @@ -107,7 +107,6 @@ #define SERVPROV(x) ((IServiceProvider*
#define STREAM(x) ((IStream*) &(x)->lpStreamVtbl)
-#define WM_MK_ONPROGRESS (WM_USER+100) #define WM_MK_CONTINUE (WM_USER+101)
static void push_task(task_t *task) @@ -175,22 +174,7 @@ static void do_tasks(Binding *This)
static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - switch(msg) { - case WM_MK_ONPROGRESS: { - on_progress_data *data = (on_progress_data*)lParam; - - TRACE("WM_MK_PROGRESS %p\n", data); - - IBindStatusCallback_OnProgress(data->binding->callback, data->progress, - data->progress_max, data->status_code, data->status_text); - - IBinding_Release(BINDING(data->binding)); - HeapFree(GetProcessHeap(), 0, data->status_text); - HeapFree(GetProcessHeap(), 0, data); - - return 0; - } - case WM_MK_CONTINUE: { + if(msg == WM_MK_CONTINUE) { Binding *binding = (Binding*)lParam;
do_tasks(binding); @@ -198,7 +182,6 @@ static LRESULT WINAPI notif_wnd_proc(HWN IBinding_Release(BINDING(binding)); return 0; } - }
return DefWindowProcW(hwnd, msg, wParam, lParam); } @@ -248,33 +231,7 @@ static void on_progress(Binding *This, U { task_t *task;
- if(GetCurrentThreadId() != This->apartment_thread) { - on_progress_data *data; - - data = HeapAlloc(GetProcessHeap(), 0, sizeof(*data)); - - IBinding_AddRef(BINDING(This)); - - data->binding = This; - data->progress = progress; - data->progress_max = progress_max; - data->status_code = status_code; - - if(status_text) { - DWORD size = (strlenW(status_text)+1)*sizeof(WCHAR); - - data->status_text = HeapAlloc(GetProcessHeap(), 0, size); - memcpy(data->status_text, status_text, size); - }else { - data->status_text = NULL; - } - - PostMessageW(This->notif_hwnd, WM_MK_ONPROGRESS, 0, (LPARAM)data); - - return; - } - - if(!This->continue_call) { + if(GetCurrentThreadId() == This->apartment_thread && !This->continue_call) { IBindStatusCallback_OnProgress(This->callback, progress, progress_max, status_code, status_text); return; @@ -301,6 +258,11 @@ static void on_progress(Binding *This, U }
push_task(task); + + if(GetCurrentThreadId() != This->apartment_thread) { + IBinding_AddRef(BINDING(This)); + PostMessageW(This->notif_hwnd, WM_MK_CONTINUE, 0, (LPARAM)This); + } }
static void dump_BINDINFO(BINDINFO *bi)