Jacek Caban : atl: Properly release registrar in do_register_dll_server.

Alexandre Julliard julliard at winehq.org
Thu Feb 25 11:36:21 CST 2010


Module: wine
Branch: master
Commit: f6b43416385a66b9603aa246487710d28badb6b5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f6b43416385a66b9603aa246487710d28badb6b5

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Feb 24 21:57:48 2010 +0100

atl: Properly release registrar in do_register_dll_server.

---

 dlls/atl/registrar.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/dlls/atl/registrar.c b/dlls/atl/registrar.c
index 691b005..70c1384 100644
--- a/dlls/atl/registrar.c
+++ b/dlls/atl/registrar.c
@@ -758,26 +758,30 @@ static HRESULT do_register_dll_server(IRegistrar *pRegistrar, LPCOLESTR wszDll,
                                       LPCOLESTR wszId, BOOL do_register,
                                       const struct _ATL_REGMAP_ENTRY* pMapEntries)
 {
+    IRegistrar *registrar;
     HRESULT hres;
     const struct _ATL_REGMAP_ENTRY *pMapEntry;
 
     static const WCHAR wszModule[] = {'M','O','D','U','L','E',0};
     static const WCHAR wszRegistry[] = {'R','E','G','I','S','T','R','Y',0};
 
-    if (!pRegistrar)
-        Registrar_create(NULL, &IID_IRegistrar, (void**)&pRegistrar);
+    if (pRegistrar)
+        registrar = pRegistrar;
+    else
+        Registrar_create(NULL, &IID_IRegistrar, (void**)&registrar);
 
-    IRegistrar_AddReplacement(pRegistrar, wszModule, wszDll);
+    IRegistrar_AddReplacement(registrar, wszModule, wszDll);
 
     for (pMapEntry = pMapEntries; pMapEntry && pMapEntry->szKey; pMapEntry++)
-        IRegistrar_AddReplacement(pRegistrar, pMapEntry->szKey, pMapEntry->szData);
+        IRegistrar_AddReplacement(registrar, pMapEntry->szKey, pMapEntry->szData);
 
     if(do_register)
-        hres = IRegistrar_ResourceRegisterSz(pRegistrar, wszDll, wszId, wszRegistry);
+        hres = IRegistrar_ResourceRegisterSz(registrar, wszDll, wszId, wszRegistry);
     else
-        hres = IRegistrar_ResourceUnregisterSz(pRegistrar, wszDll, wszId, wszRegistry);
+        hres = IRegistrar_ResourceUnregisterSz(registrar, wszDll, wszId, wszRegistry);
 
-    IRegistrar_Release(pRegistrar);
+    if(registrar != pRegistrar)
+        IRegistrar_Release(registrar);
     return hres;
 }
 




More information about the wine-cvs mailing list