Piotr Caban : msxml3: Store IBinding in bsc.
Alexandre Julliard
julliard at winehq.org
Wed Jul 9 06:10:24 CDT 2008
Module: wine
Branch: master
Commit: 56e231a4e55e478e08537822eb1c4d51a7dd26fa
URL: http://source.winehq.org/git/wine.git/?a=commit;h=56e231a4e55e478e08537822eb1c4d51a7dd26fa
Author: Piotr Caban <piotr.caban at gmail.com>
Date: Tue Jul 8 20:54:51 2008 +0200
msxml3: Store IBinding in bsc.
---
dlls/msxml3/domdoc.c | 24 +++++++++++++++++++++++-
1 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 20f5ecb..c9734b7 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -53,6 +53,8 @@ typedef struct {
const struct IBindStatusCallbackVtbl *lpVtbl;
LONG ref;
+
+ IBinding *binding;
} bsc_t;
static inline bsc_t *impl_from_IBindStatusCallback( IBindStatusCallback *iface )
@@ -96,8 +98,11 @@ static ULONG WINAPI bsc_Release(
TRACE("(%p) ref=%d\n", This, ref);
- if(!ref)
+ if(!ref) {
+ if(This->binding)
+ IBinding_Release(This->binding);
HeapFree(GetProcessHeap(), 0, This);
+ }
return ref;
}
@@ -107,6 +112,13 @@ static HRESULT WINAPI bsc_OnStartBinding(
DWORD dwReserved,
IBinding* pib)
{
+ bsc_t *This = impl_from_IBindStatusCallback(iface);
+
+ TRACE("(%p)->(%x %p)\n", This, dwReserved, pib);
+
+ This->binding = pib;
+ IBindStatusCallback_AddRef(pib);
+
return S_OK;
}
@@ -139,6 +151,15 @@ static HRESULT WINAPI bsc_OnStopBinding(
HRESULT hresult,
LPCWSTR szError)
{
+ bsc_t *This = impl_from_IBindStatusCallback(iface);
+
+ TRACE("(%p)->(%08x %s)\n", This, hresult, debugstr_w(szError));
+
+ if(This->binding) {
+ IBinding_Release(This->binding);
+ This->binding = NULL;
+ }
+
return S_OK;
}
@@ -191,6 +212,7 @@ static bsc_t *create_bsc(void)
bsc->lpVtbl = &bsc_vtbl;
bsc->ref = 1;
+ bsc->binding = NULL;
return bsc;
}
More information about the wine-cvs
mailing list