Robert Shearman : ole32:
Implement table-weak marshaling for the free-threaded marshaler.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu May 25 04:16:16 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: f9b5280dd0057462a50df9efdf472b22865f9b17
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=f9b5280dd0057462a50df9efdf472b22865f9b17
Author: Robert Shearman <rob at codeweavers.com>
Date: Wed May 24 23:01:53 2006 +0100
ole32: Implement table-weak marshaling for the free-threaded marshaler.
---
dlls/ole32/ftmarshal.c | 7 ++++++-
dlls/ole32/tests/marshal.c | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/ole32/ftmarshal.c b/dlls/ole32/ftmarshal.c
index 04eb745..4c32796 100644
--- a/dlls/ole32/ftmarshal.c
+++ b/dlls/ole32/ftmarshal.c
@@ -191,6 +191,10 @@ FTMarshalImpl_MarshalInterface (LPMARSHA
if (FAILED(hres))
return hres;
+ /* don't hold a reference to table-weak marshaled interfaces */
+ if (mshlflags & MSHLFLAGS_TABLEWEAK)
+ IUnknown_Release((IUnknown *)object);
+
hres = IStream_Write (pStm, &mshlflags, sizeof (mshlflags), NULL);
if (hres != S_OK) return STG_E_MEDIUMFULL;
@@ -258,7 +262,8 @@ FTMarshalImpl_UnmarshalInterface (LPMARS
if (hres != S_OK) return STG_E_READFAULT;
hres = IUnknown_QueryInterface(object, riid, ppv);
- IUnknown_Release(object);
+ if (!(mshlflags & MSHLFLAGS_TABLEWEAK))
+ IUnknown_Release(object);
return hres;
}
}
diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c
index e2eb472..203a128 100644
--- a/dlls/ole32/tests/marshal.c
+++ b/dlls/ole32/tests/marshal.c
@@ -1734,7 +1734,7 @@ #endif
MSHLFLAGS_TABLEWEAK);
ok_ole_success(hr, IMarshal_MarshalInterface);
- todo_wine ok_no_locks();
+ ok_no_locks();
test_freethreadedmarshaldata(pStream, MSHCTX_INPROC, &Test_ClassFactory, MSHLFLAGS_TABLEWEAK);
More information about the wine-cvs
mailing list