diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-08-19 13:48:15 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-08-19 17:02:27 -0500 |
commit | 5132ee4ed0220e7856dd6908753eba51e52bfada (patch) | |
tree | 3b95edaa8e3c98b6820ee573ec89f2cdd23e5e4e /src/burn/engine/registration.cpp | |
parent | 1c4dc6b1cd2aa3ecd05fdb22f9889ed87e61cc68 (diff) | |
download | wix-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/engine/registration.cpp')
-rw-r--r-- | src/burn/engine/registration.cpp | 9 |
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: | |||
1613 | static BOOL IsWuRebootPending() | 1613 | static 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; |