Mike McCormack : msi: Free the handle table on PROCESS_DETACH.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Aug 29 07:19:38 CDT 2006


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

Author: Mike McCormack <mike at codeweavers.com>
Date:   Tue Aug 29 17:08:01 2006 +0900

msi: Free the handle table on PROCESS_DETACH.

---

 dlls/msi/handle.c   |   13 ++++++++++---
 dlls/msi/msi_main.c |    1 +
 dlls/msi/msipriv.h  |    1 +
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/dlls/msi/handle.c b/dlls/msi/handle.c
index 3bcdb46..0193277 100644
--- a/dlls/msi/handle.c
+++ b/dlls/msi/handle.c
@@ -60,6 +60,13 @@ typedef struct msi_handle_info_t
 static msi_handle_info *msihandletable = NULL;
 static int msihandletable_size = 0;
 
+void msi_free_handle_table(void)
+{
+    msi_free( msihandletable );
+    msihandletable = NULL;
+    msihandletable_size = 0;
+}
+
 MSIHANDLE alloc_msihandle( MSIOBJECTHDR *obj )
 {
     MSIHANDLE ret = 0;
@@ -80,12 +87,12 @@ MSIHANDLE alloc_msihandle( MSIOBJECTHDR 
             newsize = 256;
             p = msi_alloc_zero(newsize*sizeof(msi_handle_info));
         }
-        else 
-	{
+        else
+        {
             newsize = msihandletable_size * 2;
             p = msi_realloc_zero(msihandletable,
                             newsize*sizeof(msi_handle_info));
-	}
+        }
         if (!p)
             goto out;
         msihandletable = p;
diff --git a/dlls/msi/msi_main.c b/dlls/msi/msi_main.c
index fcb6f5d..294de71 100644
--- a/dlls/msi/msi_main.c
+++ b/dlls/msi/msi_main.c
@@ -72,6 +72,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, 
         break;
     case DLL_PROCESS_DETACH:
         msi_dialog_unregister_class();
+        msi_free_handle_table();
         break;
     }
     return TRUE;
diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h
index 6f771da..991c11c 100644
--- a/dlls/msi/msipriv.h
+++ b/dlls/msi/msipriv.h
@@ -306,6 +306,7 @@ extern void msiobj_addref(MSIOBJECTHDR *
 extern int msiobj_release(MSIOBJECTHDR *);
 extern void msiobj_lock(MSIOBJECTHDR *);
 extern void msiobj_unlock(MSIOBJECTHDR *);
+extern void msi_free_handle_table(void);
 
 extern void free_cached_tables( MSIDATABASE *db );
 extern void msi_free_transforms( MSIDATABASE *db );




More information about the wine-cvs mailing list