Skip to content

Commit 33b840b

Browse files
Revert change disabling redetection of i2c interfaces and fix disconnected WMI failure by always reconnecting before query
1 parent 2a3a736 commit 33b840b

2 files changed

Lines changed: 27 additions & 10 deletions

File tree

ResourceManager.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,15 @@ void ResourceManager::Cleanup()
474474
delete rgb_controller;
475475
}
476476

477+
std::vector<i2c_smbus_interface *> busses_copy = busses;
478+
479+
busses.clear();
480+
481+
for(i2c_smbus_interface* bus : busses_copy)
482+
{
483+
delete bus;
484+
}
485+
477486
/*-------------------------------------------------*\
478487
| Cleanup HID interface |
479488
\*-------------------------------------------------*/
@@ -636,18 +645,14 @@ void ResourceManager::DetectDevicesThreadFunction()
636645
detection_percent = 0;
637646

638647
/*-------------------------------------------------*\
639-
| Detect i2c interfaces - only perform on first |
640-
| detection |
648+
| Detect i2c interfaces |
641649
\*-------------------------------------------------*/
642-
if(busses.empty())
643-
{
644-
LOG_NOTICE("Detecting I2C interfaces");
650+
LOG_NOTICE("Detecting I2C interfaces");
645651

646-
for(unsigned int i2c_bus_detector_idx = 0; i2c_bus_detector_idx < i2c_bus_detectors.size() && detection_is_required.load(); i2c_bus_detector_idx++)
647-
{
648-
i2c_bus_detectors[i2c_bus_detector_idx]();
649-
I2CBusListChanged();
650-
}
652+
for(unsigned int i2c_bus_detector_idx = 0; i2c_bus_detector_idx < i2c_bus_detectors.size() && detection_is_required.load(); i2c_bus_detector_idx++)
653+
{
654+
i2c_bus_detectors[i2c_bus_detector_idx]();
655+
I2CBusListChanged();
651656
}
652657

653658
/*-------------------------------------------------*\

wmi/wmi.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,18 @@ HRESULT Wmi::query(std::string queryStr, std::vector<QueryObj>& queryVectorOut,
147147
int nIdx = 0;
148148
IEnumWbemClassObject* pEnumerator = nullptr;
149149

150+
// Reconnect to server before each query as we were seeing disconnected failures
151+
hres = pLoc->ConnectServer(
152+
_bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
153+
nullptr, // User name. NULL = current user
154+
nullptr, // User password. NULL = current
155+
nullptr, // Locale. NULL indicates current
156+
0, // Security flags.
157+
nullptr, // Authority (for example, Kerberos)
158+
nullptr, // Context object
159+
&pSvc // pointer to IWbemServices proxy
160+
);
161+
150162
// Make the WMI query
151163
hres = pSvc->ExecQuery(
152164
bstr_t("WQL"),

0 commit comments

Comments
 (0)