Mike McCormack : msi:
Defer package deletion until after the database is closed.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Nov 14 05:14:28 CST 2006
Module: wine
Branch: master
Commit: 3c2e79e72713a61f0eb4ea87235dbd8ed3f5434f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3c2e79e72713a61f0eb4ea87235dbd8ed3f5434f
Author: Mike McCormack <mike at codeweavers.com>
Date: Tue Nov 14 12:42:50 2006 +0900
msi: Defer package deletion until after the database is closed.
---
dlls/msi/package.c | 30 ++++++++++++++++--------------
1 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 1455c6d..6f3815f 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -54,11 +54,10 @@ static void MSI_FreePackage( MSIOBJECTHD
if( package->dialog )
msi_dialog_destroy( package->dialog );
- ACTION_free_package_structures(package);
-
- msi_free_properties( package );
msiobj_release( &package->db->hdr );
+ ACTION_free_package_structures(package);
+ msi_free_properties( package );
}
static UINT clone_properties( MSIPACKAGE *package )
@@ -548,15 +547,16 @@ LPCWSTR msi_download_file( LPCWSTR szUrl
UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
{
+ static const WCHAR OriginalDatabase[] =
+ {'O','r','i','g','i','n','a','l','D','a','t','a','b','a','s','e',0};
+ static const WCHAR Database[] = {'D','A','T','A','B','A','S','E',0};
MSIDATABASE *db = NULL;
MSIPACKAGE *package;
MSIHANDLE handle;
LPWSTR ptr, base_url = NULL;
UINT r;
-
- static const WCHAR OriginalDatabase[] =
- {'O','r','i','g','i','n','a','l','D','a','t','a','b','a','s','e',0};
- static const WCHAR Database[] = {'D','A','T','A','B','A','S','E',0};
+ WCHAR temppath[MAX_PATH];
+ LPCWSTR file = szPackage;
TRACE("%s %p\n", debugstr_w(szPackage), pPackage);
@@ -569,9 +569,6 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage,
}
else
{
- WCHAR temppath[MAX_PATH];
- LPCWSTR file;
-
if ( UrlIsW( szPackage, URLIS_URL ) )
{
file = msi_download_file( szPackage, temppath );
@@ -587,14 +584,12 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage,
file = copy_package_to_temp( szPackage, temppath );
r = MSI_OpenDatabaseW( file, MSIDBOPEN_READONLY, &db );
-
- if (file != szPackage)
- DeleteFileW( file );
-
if( r != ERROR_SUCCESS )
{
if (GetLastError() == ERROR_FILE_NOT_FOUND)
msi_ui_error( 4, MB_OK | MB_ICONWARNING );
+ if (file != szPackage)
+ DeleteFileW( file );
return r;
}
@@ -604,7 +599,14 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage,
msi_free( base_url );
msiobj_release( &db->hdr );
if( !package )
+ {
+ if (file != szPackage)
+ DeleteFileW( file );
return ERROR_FUNCTION_FAILED;
+ }
+
+ if( file != szPackage )
+ track_tempfile( package, file );
if( szPackage[0] != '#' )
{
More information about the wine-cvs
mailing list