Dmitry Timoshkov : shell32: Remove class cache introduced in commit f686cfab2feb9010efe82a932dc9f5904566c8ab .

Alexandre Julliard julliard at wine.codeweavers.com
Wed Sep 12 07:50:38 CDT 2007


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

Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date:   Wed Sep 12 15:04:02 2007 +0900

shell32: Remove class cache introduced in commit f686cfab2feb9010efe82a932dc9f5904566c8ab.

---

 dlls/shell32/shlfolder.c |  101 +---------------------------------------------
 1 files changed, 2 insertions(+), 99 deletions(-)

diff --git a/dlls/shell32/shlfolder.c b/dlls/shell32/shlfolder.c
index cbbd12f..b6bdd07 100644
--- a/dlls/shell32/shlfolder.c
+++ b/dlls/shell32/shlfolder.c
@@ -50,28 +50,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL (shell);
 
-static CRITICAL_SECTION SHELL32_SF_ClassCacheCS;
-static CRITICAL_SECTION_DEBUG critsect_debug =
-{
-    0, 0, &SHELL32_SF_ClassCacheCS,
-    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
-      0, 0, { (DWORD_PTR)(__FILE__ ": SHELL32_SF_ClassCacheCS") }
-};
-static CRITICAL_SECTION SHELL32_SF_ClassCacheCS = { &critsect_debug, -1, 0, 0, 0, 0 };
-
-/* IShellFolder class cache */
-struct _sf_cls_cache_entry
-{
-    CLSID clsid;
-    LPVOID pv;
-};
-
-static struct _sf_class_cache
-{
-    DWORD allocated, used;
-    struct _sf_cls_cache_entry *sf_cls_cache_entry;
-} sf_cls_cache;
-
 static const WCHAR wszDotShellClassInfo[] = {
     '.','S','h','e','l','l','C','l','a','s','s','I','n','f','o',0};
 
@@ -204,70 +182,6 @@ HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc,
     return hr;
 }
 
-static BOOL get_iface_from_cache(REFCLSID clsid, LPVOID *ppvOut)
-{
-    BOOL ret = FALSE;
-    int i;
-
-    EnterCriticalSection(&SHELL32_SF_ClassCacheCS);
-
-    for (i = 0; i < sf_cls_cache.used; i++)
-    {
-        if (IsEqualIID(&sf_cls_cache.sf_cls_cache_entry[i].clsid, clsid))
-        {
-            *ppvOut = sf_cls_cache.sf_cls_cache_entry[i].pv;
-            /* Pin it */
-            IUnknown_AddRef((IUnknown *)*ppvOut);
-            ret = TRUE;
-            break;
-        }
-    }
-
-    LeaveCriticalSection(&SHELL32_SF_ClassCacheCS);
-    return ret;
-}
-
-static void add_iface_to_cache(REFCLSID clsid, LPVOID pv)
-{
-    EnterCriticalSection(&SHELL32_SF_ClassCacheCS);
-
-    if (sf_cls_cache.used >= sf_cls_cache.allocated)
-    {
-        DWORD allocated;
-        struct _sf_cls_cache_entry *sf_cls_cache_entry;
-
-        if (!sf_cls_cache.allocated)
-        {
-            allocated = 4;
-            sf_cls_cache_entry = HeapAlloc(GetProcessHeap(), 0,
-                                           4 * sizeof(*sf_cls_cache_entry));
-        }
-        else
-        {
-            allocated = sf_cls_cache.allocated * 2;
-            sf_cls_cache_entry = HeapReAlloc(GetProcessHeap(), 0, sf_cls_cache.sf_cls_cache_entry,
-                                             allocated * sizeof(*sf_cls_cache_entry));
-        }
-        if (!sf_cls_cache_entry)
-        {
-            LeaveCriticalSection(&SHELL32_SF_ClassCacheCS);
-            return;
-        }
-
-        sf_cls_cache.allocated = allocated;
-        sf_cls_cache.sf_cls_cache_entry = sf_cls_cache_entry;
-    }
-
-    /* Pin it */
-    IUnknown_AddRef((IUnknown *)pv);
-
-    sf_cls_cache.sf_cls_cache_entry[sf_cls_cache.used].clsid = *clsid;
-    sf_cls_cache.sf_cls_cache_entry[sf_cls_cache.used].pv = pv;
-    sf_cls_cache.used++;
-
-    LeaveCriticalSection(&SHELL32_SF_ClassCacheCS);
-}
-
 /***********************************************************************
  *	SHELL32_CoCreateInitSF
  *
@@ -281,22 +195,11 @@ static void add_iface_to_cache(REFCLSID clsid, LPVOID pv)
 static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
                 LPCITEMIDLIST pidlChild, REFCLSID clsid, LPVOID * ppvOut)
 {
-    HRESULT hr = S_OK;
+    HRESULT hr;
 
     TRACE ("%p %s %p\n", pidlRoot, debugstr_w(pathRoot), pidlChild);
 
-    if (!get_iface_from_cache(clsid, ppvOut))
-    {
-        hr = SHCoCreateInstance(NULL, clsid, NULL, &IID_IShellFolder, ppvOut);
-        if (SUCCEEDED(hr))
-        {
-            TRACE("loaded %p %s\n", *ppvOut, wine_dbgstr_guid(clsid));
-            add_iface_to_cache(clsid, *ppvOut);
-        }
-    }
-    else
-        TRACE("found in the cache %p %s\n", *ppvOut, wine_dbgstr_guid(clsid));
-
+    hr = SHCoCreateInstance(NULL, clsid, NULL, &IID_IShellFolder, ppvOut);
     if (SUCCEEDED (hr))
     {
 	LPITEMIDLIST pidlAbsolute = ILCombine (pidlRoot, pidlChild);




More information about the wine-cvs mailing list