Piotr Caban : urlmon: Clean session related data in free_session function.

Alexandre Julliard julliard at winehq.org
Tue Mar 13 13:50:38 CDT 2012


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Mar 13 14:09:30 2012 +0100

urlmon: Clean session related data in free_session function.

---

 dlls/urlmon/session.c     |   27 +++++++++++++++++----------
 dlls/urlmon/urlmon_main.c |   12 +++++-------
 dlls/urlmon/urlmon_main.h |    2 +-
 3 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index 24ed2e5..d61a35e 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -119,7 +119,7 @@ static HRESULT get_protocol_cf(LPCWSTR schema, DWORD schema_len, CLSID *pclsid,
     return SUCCEEDED(hres) ? S_OK : MK_E_SYNTAX;
 }
 
-static HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL urlmon_protocol)
+HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL urlmon_protocol)
 {
     name_space *new_name_space;
 
@@ -165,15 +165,6 @@ static HRESULT unregister_namespace(IClassFactory *cf, LPCWSTR protocol)
     return S_OK;
 }
 
-
-void register_urlmon_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL do_register)
-{
-    if(do_register)
-        register_namespace(cf, clsid, protocol, TRUE);
-    else
-        unregister_namespace(cf, protocol);
-}
-
 BOOL is_registered_protocol(LPCWSTR url)
 {
     DWORD schema_len;
@@ -675,5 +666,21 @@ HRESULT WINAPI ObtainUserAgentString(DWORD dwOption, LPSTR pcszUAOut, DWORD *cbS
 
 void free_session(void)
 {
+    name_space *ns_iter, *ns_last;
+    mime_filter *mf_iter, *mf_last;
+
+    LIST_FOR_EACH_ENTRY_SAFE(ns_iter, ns_last, &name_space_list, name_space, entry) {
+            if(!ns_iter->urlmon)
+                IClassFactory_Release(ns_iter->cf);
+            heap_free(ns_iter->protocol);
+            heap_free(ns_iter);
+    }
+
+    LIST_FOR_EACH_ENTRY_SAFE(mf_iter, mf_last, &mime_filter_list, mime_filter, entry) {
+            IClassFactory_Release(mf_iter->cf);
+            heap_free(mf_iter->mime);
+            heap_free(mf_iter);
+    }
+
     heap_free(user_agent);
 }
diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c
index e22f037..3fea58c 100644
--- a/dlls/urlmon/urlmon_main.c
+++ b/dlls/urlmon/urlmon_main.c
@@ -42,7 +42,7 @@ LONG URLMON_refCount = 0;
 static HMODULE hCabinet = NULL;
 static DWORD urlmon_tls = TLS_OUT_OF_INDEXES;
 
-static void init_session(BOOL);
+static void init_session(void);
 
 static struct list tls_list = LIST_INIT(tls_list);
 
@@ -136,7 +136,6 @@ static void process_detach(void)
     if (hCabinet)
         FreeLibrary(hCabinet);
 
-    init_session(FALSE);
     free_session();
     free_tls_list();
 }
@@ -152,7 +151,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
 
     switch(fdwReason) {
     case DLL_PROCESS_ATTACH:
-        init_session(TRUE);
+        init_session();
         break;
 
     case DLL_PROCESS_DETACH:
@@ -327,15 +326,14 @@ static const struct object_creation_info object_creation[] =
     { &CLSID_CUri,                    &CUriCF.IClassFactory_iface,            NULL    }
 };
 
-static void init_session(BOOL init)
+static void init_session(void)
 {
     unsigned int i;
 
     for(i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++) {
-
         if(object_creation[i].protocol)
-            register_urlmon_namespace(object_creation[i].cf, object_creation[i].clsid,
-                                      object_creation[i].protocol, init);
+            register_namespace(object_creation[i].cf, object_creation[i].clsid,
+                                      object_creation[i].protocol, TRUE);
     }
 }
 
diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h
index 391b1b3..be9bc7f 100644
--- a/dlls/urlmon/urlmon_main.h
+++ b/dlls/urlmon/urlmon_main.h
@@ -68,7 +68,7 @@ IInternetProtocolInfo *get_protocol_info(LPCWSTR) DECLSPEC_HIDDEN;
 HRESULT get_protocol_handler(IUri*,CLSID*,BOOL*,IClassFactory**) DECLSPEC_HIDDEN;
 IInternetProtocol *get_mime_filter(LPCWSTR) DECLSPEC_HIDDEN;
 BOOL is_registered_protocol(LPCWSTR) DECLSPEC_HIDDEN;
-void register_urlmon_namespace(IClassFactory*,REFIID,LPCWSTR,BOOL) DECLSPEC_HIDDEN;
+HRESULT register_namespace(IClassFactory*,REFIID,LPCWSTR,BOOL) DECLSPEC_HIDDEN;
 HINTERNET get_internet_session(IInternetBindInfo*) DECLSPEC_HIDDEN;
 LPWSTR get_useragent(void) DECLSPEC_HIDDEN;
 void free_session(void) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list