Nikolay Sivov : shell32: Release cached desktop folder on process detach.
Alexandre Julliard
julliard at winehq.org
Mon Jun 16 12:37:49 CDT 2014
Module: wine
Branch: master
Commit: d3a034e3482637ad28dc2d36eba27d2c94b8a6ae
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3a034e3482637ad28dc2d36eba27d2c94b8a6ae
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Jun 14 23:56:45 2014 +0400
shell32: Release cached desktop folder on process detach.
---
dlls/shell32/shell32_main.c | 1 +
dlls/shell32/shell32_main.h | 1 +
dlls/shell32/shfldr_desktop.c | 12 ++++++++++--
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c
index 091c6e1..679ebec 100644
--- a/dlls/shell32/shell32_main.c
+++ b/dlls/shell32/shell32_main.c
@@ -1281,6 +1281,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
if (fImpLoad) break;
SIC_Destroy();
FreeChangeNotifications();
+ release_desktop_folder();
release_typelib();
break;
}
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index e7765eb..954f1e4 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -230,5 +230,6 @@ BOOL AddToEnumList(IEnumIDListImpl *list, LPITEMIDLIST pidl) DECLSPEC_HIDDEN;
BOOL CreateFolderEnumList(IEnumIDListImpl *list, LPCWSTR lpszPath, DWORD dwFlags) DECLSPEC_HIDDEN;
void release_typelib(void) DECLSPEC_HIDDEN;
+void release_desktop_folder(void) DECLSPEC_HIDDEN;
#endif
diff --git a/dlls/shell32/shfldr_desktop.c b/dlls/shell32/shfldr_desktop.c
index 2910106..695e558 100644
--- a/dlls/shell32/shfldr_desktop.c
+++ b/dlls/shell32/shfldr_desktop.c
@@ -57,7 +57,6 @@ WINE_DEFAULT_DEBUG_CHANNEL (shell);
/* Undocumented functions from shdocvw */
extern HRESULT WINAPI IEParseDisplayNameWithBCW(DWORD codepage, LPCWSTR lpszDisplayName, LPBC pbc, LPITEMIDLIST *ppidl);
-
/***********************************************************************
* Desktopfolder implementation
*/
@@ -75,6 +74,8 @@ typedef struct {
BOOL fAcceptFmt; /* flag for pending Drop */
} IDesktopFolderImpl;
+static IDesktopFolderImpl *cached_sf;
+
static inline IDesktopFolderImpl *impl_from_IShellFolder2(IShellFolder2 *iface)
{
return CONTAINING_RECORD(iface, IDesktopFolderImpl, IShellFolder2_iface);
@@ -934,13 +935,20 @@ static const IPersistFolder2Vtbl vt_IPersistFolder2 =
ISF_Desktop_IPersistFolder2_fnGetCurFolder
};
+void release_desktop_folder(void)
+{
+ if (!cached_sf) return;
+ SHFree(cached_sf->pidlRoot);
+ SHFree(cached_sf->sPathTarget);
+ LocalFree(cached_sf);
+}
+
/**************************************************************************
* ISF_Desktop_Constructor
*/
HRESULT WINAPI ISF_Desktop_Constructor (
IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv)
{
- static IDesktopFolderImpl *cached_sf;
WCHAR szMyPath[MAX_PATH];
TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid));
More information about the wine-cvs
mailing list