Module: wine Branch: master Commit: bbaa307fdf9904aa90ff870079d508f0ebb1c564 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bbaa307fdf9904aa90ff870079... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Jul 12 14:25:58 2012 +0200 mshtml: Use per-inner window task_magic for binding. --- dlls/mshtml/htmlwindow.c | 3 +++ dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/navigate.c | 9 ++++----- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 0ced93d..491a453 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -235,6 +235,7 @@ static void release_inner_window(HTMLInnerWindow *This) TRACE("%p\n", This); + remove_target_tasks(This->task_magic); abort_window_bindings(This); release_script_hosts(This); @@ -2622,6 +2623,8 @@ static HRESULT create_inner_window(HTMLOuterWindow *outer_window, HTMLInnerWindo init_dispex(&window->dispex, (IUnknown*)&window->base.IHTMLWindow2_iface, &HTMLWindow_dispex); + window->task_magic = get_task_target_magic(); + *ret = window; return S_OK; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f0dde6c..430b744 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -361,6 +361,8 @@ struct HTMLInnerWindow { DWORD global_prop_cnt; DWORD global_prop_size; + LONG task_magic; + nsChannelBSC *bscallback; struct list bindings; }; diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 1fe4f9d..bfc8671 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -1325,7 +1325,7 @@ static HRESULT async_stop_request(nsChannelBSC *This) IBindStatusCallback_AddRef(&This->bsc.IBindStatusCallback_iface); task->bsc = This; - push_task(&task->header, stop_request_proc, stop_request_task_destr, This->window->doc_obj->basedoc.task_magic); + push_task(&task->header, stop_request_proc, stop_request_task_destr, This->bsc.window->task_magic); return S_OK; } @@ -1679,7 +1679,7 @@ HRESULT async_start_doc_binding(HTMLOuterWindow *window, HTMLInnerWindow *pendin task->pending_window = pending_window; IHTMLWindow2_AddRef(&pending_window->base.IHTMLWindow2_iface); - push_task(&task->header, start_doc_binding_proc, start_doc_binding_task_destr, window->task_magic); + push_task(&task->header, start_doc_binding_proc, start_doc_binding_task_destr, pending_window->task_magic); return S_OK; } @@ -1687,6 +1687,8 @@ void abort_window_bindings(HTMLInnerWindow *window) { BSCallback *iter; + remove_target_tasks(window->task_magic); + while(!list_empty(&window->bindings)) { iter = LIST_ENTRY(window->bindings.next, BSCallback, entry); @@ -1694,9 +1696,6 @@ void abort_window_bindings(HTMLInnerWindow *window) IBindStatusCallback_AddRef(&iter->IBindStatusCallback_iface); - if(iter->window && iter->window->doc) - remove_target_tasks(iter->window->doc->basedoc.task_magic); - if(iter->binding) IBinding_Abort(iter->binding); else