From 8ed8ca0721e08ea953f4751086c4845c98551c46 Mon Sep 17 00:00:00 2001
From: Sean Hall <r.sean.hall@gmail.com>
Date: Mon, 14 Mar 2022 15:20:28 -0500
Subject: Don't close handles from MsiBeginTransaction.

Assume that MsiEndTransaction must be called exactly once for each MsiBeginTransaction.

Fixes 6695
---
 src/burn/engine/apply.cpp     | 8 +++-----
 src/burn/engine/msiengine.cpp | 3 +--
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/burn/engine/apply.cpp b/src/burn/engine/apply.cpp
index 4e652768..3ad22e9b 100644
--- a/src/burn/engine/apply.cpp
+++ b/src/burn/engine/apply.cpp
@@ -3123,12 +3123,10 @@ static HRESULT ExecuteMsiCommitTransaction(
         hr = MsiEngineCommitTransaction(pRollbackBoundary);
     }
 
-    if (SUCCEEDED(hr))
-    {
-        pRollbackBoundary->fActiveTransaction = FALSE;
+    // Assume that MsiEndTransaction can only be called once for each MsiBeginTransaction.
+    pRollbackBoundary->fActiveTransaction = FALSE;
 
-        ResetTransactionRegistrationState(pEngineState, TRUE);
-    }
+    ResetTransactionRegistrationState(pEngineState, TRUE);
 
 LExit:
     if (fCommitBeginCalled)
diff --git a/src/burn/engine/msiengine.cpp b/src/burn/engine/msiengine.cpp
index d306f3e0..d892b2bc 100644
--- a/src/burn/engine/msiengine.cpp
+++ b/src/burn/engine/msiengine.cpp
@@ -1129,8 +1129,7 @@ extern "C" HRESULT MsiEngineBeginTransaction(
     ExitOnFailure(hr, "Failed to begin an MSI transaction");
 
 LExit:
-    ReleaseMsi(hTransactionHandle);
-    ReleaseHandle(hChangeOfOwnerEvent);
+    // Assume that MsiEndTransaction cleans up the handles.
 
     return hr;
 }
-- 
cgit v1.2.3-55-g6feb