Device: Guard mutex usage

pull/76/merge
Kyle Schwarz 2025-10-30 11:18:12 -04:00
parent 83ab65b062
commit ebf9409c18
1 changed files with 19 additions and 17 deletions

View File

@ -554,26 +554,28 @@ bool Device::goOnline() {
return false; return false;
} }
assignedClientId = com->getClientIDSync(); if(supportsNetworkMutex()) {
if(assignedClientId) { assignedClientId = com->getClientIDSync();
// firmware supports clientid/mutex if(assignedClientId) {
networkMutexCallbackHandle = lockAllNetworks(std::numeric_limits<uint32_t>::max(), std::numeric_limits<uint32_t>::max(), NetworkMutexType::Shared, [this](std::shared_ptr<Message> message) { // firmware supports clientid/mutex
auto netMutexMsg = std::static_pointer_cast<NetworkMutexMessage>(message); networkMutexCallbackHandle = lockAllNetworks(std::numeric_limits<uint32_t>::max(), std::numeric_limits<uint32_t>::max(), NetworkMutexType::Shared, [this](std::shared_ptr<Message> message) {
if(netMutexMsg->networks.size() && netMutexMsg->event.has_value()) { auto netMutexMsg = std::static_pointer_cast<NetworkMutexMessage>(message);
switch(*netMutexMsg->event) { if(netMutexMsg->networks.size() && netMutexMsg->event.has_value()) {
case NetworkMutexEvent::Acquired: switch(*netMutexMsg->event) {
lockedNetworks.emplace(*netMutexMsg->networks.begin()); case NetworkMutexEvent::Acquired:
break; lockedNetworks.emplace(*netMutexMsg->networks.begin());
case NetworkMutexEvent::Released: { break;
auto it = lockedNetworks.find(*netMutexMsg->networks.begin()); case NetworkMutexEvent::Released: {
if (it != lockedNetworks.end()) auto it = lockedNetworks.find(*netMutexMsg->networks.begin());
lockedNetworks.erase(it); if (it != lockedNetworks.end())
break; lockedNetworks.erase(it);
break;
}
} }
} }
} }
} );
); }
} }
// (re)start the keeponline // (re)start the keeponline