Skip to content

Commit

Permalink
fix(display): retry reverting configuration only if device was added/…
Browse files Browse the repository at this point in the history
…removed
  • Loading branch information
FrogTheFrog committed Jan 15, 2025
1 parent 7f0351d commit 4e27efd
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 4 deletions.
38 changes: 35 additions & 3 deletions src/display_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -674,11 +674,43 @@ namespace display_device {
scheduler_option.m_execution = SchedulerOptions::Execution::ScheduledOnly;
}

DD_DATA.sm_instance->schedule([try_once = (option == revert_option_e::try_once)](auto &settings_iface, auto &stop_token) {
// Here we want to keep retrying indefinitely until we succeed.
if (settings_iface.revertSettings() || try_once) {
DD_DATA.sm_instance->schedule([try_once = (option == revert_option_e::try_once), tried_out_devices = std::set<std::string> {}](auto &settings_iface, auto &stop_token) mutable {
if (try_once) {
settings_iface.revertSettings();
stop_token.requestStop();
return;
}

auto available_devices { [&settings_iface]() {
const auto devices { settings_iface.enumAvailableDevices() };
std::set<std::string> available_devices;

std::transform(
std::begin(devices), std::end(devices),
std::inserter(available_devices, std::end(available_devices)),
[](const auto &device) { return device.m_device_id + " - " + device.m_friendly_name; });

return available_devices;
}() };
if (available_devices == tried_out_devices) {
BOOST_LOG(debug) << "Skipping reverting configuration, because the no newly added/removed devices were detected since last check. Currently available devices:\n"
<< toJson(available_devices);
return;
}

if (const auto result { settings_iface.revertSettings() }; result == SettingsManager::RevertResult::Ok) {
stop_token.requestStop();
return;
}
else if (result == SettingsManager::RevertResult::ApiTemporarilyUnavailable) {
// Do nothing and retry next time
return;
}

// If we have failed to revert settings then we will try to do it next time only if a device was added/removed
BOOST_LOG(warning) << "Failed to revert display device configuration (will retry once devices are added or removed). Enabling all of the available devices:\n"
<< toJson(available_devices);
tried_out_devices.swap(available_devices);
},
scheduler_option);
}
Expand Down

0 comments on commit 4e27efd

Please sign in to comment.