Andrew Eikum : quartz: Implement IClassFactory::LockServer.
Alexandre Julliard
julliard at winehq.org
Fri Sep 2 11:41:43 CDT 2016
Module: wine
Branch: master
Commit: b0534c12c0a8b7a526aef04f23f67a33abd3a455
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b0534c12c0a8b7a526aef04f23f67a33abd3a455
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Thu Sep 1 15:11:43 2016 -0500
quartz: Implement IClassFactory::LockServer.
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/quartz/main.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/main.c b/dlls/quartz/main.c
index 32865f3..7c2accb 100644
--- a/dlls/quartz/main.c
+++ b/dlls/quartz/main.c
@@ -29,6 +29,8 @@ extern HRESULT WINAPI QUARTZ_DllGetClassObject(REFCLSID, REFIID, LPVOID *) DECLS
extern HRESULT WINAPI QUARTZ_DllCanUnloadNow(void) DECLSPEC_HIDDEN;
extern BOOL WINAPI QUARTZ_DllMain(HINSTANCE, DWORD, LPVOID) DECLSPEC_HIDDEN;
+static LONG server_locks = 0;
+
/* For the moment, do nothing here. */
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
{
@@ -142,6 +144,10 @@ static HRESULT WINAPI DSCF_LockServer(IClassFactory *iface, BOOL dolock)
{
IClassFactoryImpl *This = impl_from_IClassFactory(iface);
FIXME("(%p)->(%d),stub!\n",This,dolock);
+ if(dolock)
+ InterlockedIncrement(&server_locks);
+ else
+ InterlockedDecrement(&server_locks);
return S_OK;
}
@@ -204,7 +210,9 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
*/
HRESULT WINAPI DllCanUnloadNow(void)
{
- return QUARTZ_DllCanUnloadNow();
+ if(server_locks == 0 && QUARTZ_DllCanUnloadNow() == S_OK)
+ return S_OK;
+ return S_FALSE;
}
More information about the wine-cvs
mailing list