msi: Don't delete the table if the table deleted itself because of a release.
authorJames Hawkins <truiken@gmail.com>
Tue, 23 Oct 2007 08:07:54 +0000 (03:07 -0500)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 23 Oct 2007 16:05:05 +0000 (18:05 +0200)
dlls/msi/alter.c

index e0a1b91..b8d315e 100644 (file)
@@ -145,13 +145,18 @@ static UINT alter_add_column(MSIALTERVIEW *av)
 static UINT ALTER_execute( struct tagMSIVIEW *view, MSIRECORD *record )
 {
     MSIALTERVIEW *av = (MSIALTERVIEW*)view;
+    UINT ref;
 
     TRACE("%p %p\n", av, record);
 
     if (av->hold == 1)
         av->table->ops->add_ref(av->table);
     else if (av->hold == -1)
-        av->table->ops->release(av->table);
+    {
+        ref = av->table->ops->release(av->table);
+        if (ref == 0)
+            av->table = NULL;
+    }
 
     if (av->colinfo)
         return alter_add_column(av);
@@ -202,7 +207,8 @@ static UINT ALTER_delete( struct tagMSIVIEW *view )
     MSIALTERVIEW *av = (MSIALTERVIEW*)view;
 
     TRACE("%p\n", av );
-    av->table->ops->delete( av->table );
+    if (av->table)
+        av->table->ops->delete( av->table );
     msi_free( av );
 
     return ERROR_SUCCESS;