@joebigelow / wix-1 / commits / 5132ee4e

Fix bug in IsWuRebootPending where it uninitialized COM on failure.

Fixes other half of 6870

Sean Hall committed Aug 19, 2022 at 13:48 UTC 5132ee4ed0220e7856dd6908753eba51e52bfada
1 file changed +7 -2
src/burn/engine/registration.cpp
+7 -2
@@ -1613,12 +1613,14 @@ LExit:
1613 static BOOL IsWuRebootPending()
1614 {
1615 HRESULT hr = S_OK;
1616 + BOOL fUninitializeCom = FALSE;
1617 BOOL fRebootPending = FALSE;
1618
1619 // Do a best effort to ask WU if a reboot is required. If anything goes
1620 // wrong then let's pretend a reboot is not required.
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)
1624 {
1625 hr = WuaRestartRequired(&fRebootPending);
1626 if (FAILED(hr))
@@ -1626,7 +1628,10 @@ static BOOL IsWuRebootPending()
1628 fRebootPending = FALSE;
1629 }
1630
1629 - ::CoUninitialize();
1631 + if (fUninitializeCom)
1632 + {
1633 + ::CoUninitialize();
1634 + }
1635 }
1636
1637 return fRebootPending;