Revert change disabling redetection of i2c interfaces and fix disconnected WMI failure by always reconnecting before query

This commit is contained in:
Adam Honse 2021-05-24 18:38:26 -05:00
parent 2a3a736f09
commit 33b840b2b9
2 changed files with 27 additions and 10 deletions

View file

@ -474,6 +474,15 @@ void ResourceManager::Cleanup()
delete rgb_controller;
}
std::vector<i2c_smbus_interface *> busses_copy = busses;
busses.clear();
for(i2c_smbus_interface* bus : busses_copy)
{
delete bus;
}
/*-------------------------------------------------*\
| Cleanup HID interface |
\*-------------------------------------------------*/
@ -636,18 +645,14 @@ void ResourceManager::DetectDevicesThreadFunction()
detection_percent = 0;
/*-------------------------------------------------*\
| Detect i2c interfaces - only perform on first |
| detection |
| Detect i2c interfaces |
\*-------------------------------------------------*/
if(busses.empty())
{
LOG_NOTICE("Detecting I2C interfaces");
LOG_NOTICE("Detecting I2C interfaces");
for(unsigned int i2c_bus_detector_idx = 0; i2c_bus_detector_idx < i2c_bus_detectors.size() && detection_is_required.load(); i2c_bus_detector_idx++)
{
i2c_bus_detectors[i2c_bus_detector_idx]();
I2CBusListChanged();
}
for(unsigned int i2c_bus_detector_idx = 0; i2c_bus_detector_idx < i2c_bus_detectors.size() && detection_is_required.load(); i2c_bus_detector_idx++)
{
i2c_bus_detectors[i2c_bus_detector_idx]();
I2CBusListChanged();
}
/*-------------------------------------------------*\

View file

@ -147,6 +147,18 @@ HRESULT Wmi::query(std::string queryStr, std::vector<QueryObj>& queryVectorOut,
int nIdx = 0;
IEnumWbemClassObject* pEnumerator = nullptr;
// Reconnect to server before each query as we were seeing disconnected failures
hres = pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
nullptr, // User name. NULL = current user
nullptr, // User password. NULL = current
nullptr, // Locale. NULL indicates current
0, // Security flags.
nullptr, // Authority (for example, Kerberos)
nullptr, // Context object
&pSvc // pointer to IWbemServices proxy
);
// Make the WMI query
hres = pSvc->ExecQuery(
bstr_t("WQL"),