aboutsummaryrefslogtreecommitdiff
path: root/src/burn
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-08-19 13:48:15 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-08-19 17:02:27 -0500
commit5132ee4ed0220e7856dd6908753eba51e52bfada (patch)
tree3b95edaa8e3c98b6820ee573ec89f2cdd23e5e4e /src/burn
parent1c4dc6b1cd2aa3ecd05fdb22f9889ed87e61cc68 (diff)
downloadwix-5132ee4ed0220e7856dd6908753eba51e52bfada.tar.gz
wix-5132ee4ed0220e7856dd6908753eba51e52bfada.tar.bz2
wix-5132ee4ed0220e7856dd6908753eba51e52bfada.zip
Fix bug in IsWuRebootPending where it uninitialized COM on failure.
Fixes other half of 6870
Diffstat (limited to 'src/burn')
-rw-r--r--src/burn/engine/registration.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/burn/engine/registration.cpp b/src/burn/engine/registration.cpp
index 35100336..0117a993 100644
--- a/src/burn/engine/registration.cpp
+++ b/src/burn/engine/registration.cpp
@@ -1613,12 +1613,14 @@ LExit:
1613static BOOL IsWuRebootPending() 1613static BOOL IsWuRebootPending()
1614{ 1614{
1615 HRESULT hr = S_OK; 1615 HRESULT hr = S_OK;
1616 BOOL fUninitializeCom = FALSE;
1616 BOOL fRebootPending = FALSE; 1617 BOOL fRebootPending = FALSE;
1617 1618
1618 // Do a best effort to ask WU if a reboot is required. If anything goes 1619 // Do a best effort to ask WU if a reboot is required. If anything goes
1619 // wrong then let's pretend a reboot is not required. 1620 // wrong then let's pretend a reboot is not required.
1620 hr = ::CoInitialize(NULL); 1621 hr = ::CoInitialize(NULL);
1621 if (SUCCEEDED(hr) || RPC_E_CHANGED_MODE == hr) 1622 fUninitializeCom = SUCCEEDED(hr);
1623 if (fUninitializeCom || RPC_E_CHANGED_MODE == hr)
1622 { 1624 {
1623 hr = WuaRestartRequired(&fRebootPending); 1625 hr = WuaRestartRequired(&fRebootPending);
1624 if (FAILED(hr)) 1626 if (FAILED(hr))
@@ -1626,7 +1628,10 @@ static BOOL IsWuRebootPending()
1626 fRebootPending = FALSE; 1628 fRebootPending = FALSE;
1627 } 1629 }
1628 1630
1629 ::CoUninitialize(); 1631 if (fUninitializeCom)
1632 {
1633 ::CoUninitialize();
1634 }
1630 } 1635 }
1631 1636
1632 return fRebootPending; 1637 return fRebootPending;