Handle validation failures and the uncommon replacement flow outside the normal driver-registration path.
Definition at line 89 of file manager.cpp.hpp.
93 {
95 FL_WARN(
"ChannelManager::addDriver() - Null driver provided");
96 return false;
97 }
99 FL_WARN(
"ChannelManager::addDriver() - Engine has empty name (driver->getName() returned empty string)");
100 return false;
101 }
102
103 for (
const auto& entry :
mDrivers) {
104 if (entry.name == *engineName) {
105
106
107
108
109
110 if (entry.driver == driver && entry.priority == priority) {
111 FL_DBG(
"ChannelManager::addDriver() - '" << engineName->
c_str() <<
"' already registered at priority " << priority <<
" (idempotent no-op)");
112 return false;
113 }
114 FL_WARN(
"ChannelManager::addDriver() - Replacing existing driver '" << engineName->
c_str() <<
"'");
115
116 FL_DBG(
"ChannelManager: Waiting for all drivers to become READY before replacement");
118
119
120
121 for (
size_t i = 0; i <
mDrivers.size(); ++i) {
122 if (
mDrivers[i].name != *engineName) {
123 continue;
124 }
125 FL_DBG(
"ChannelManager: Removing old driver '" << engineName->
c_str() <<
"' (shared_ptr may delete)");
127 mDrivers[i].driver->setPollNeededCallback(IChannelDriver::PollNeededCallback());
128 }
130 break;
131 }
132 return true;
133 }
134 }
135 return true;
136}
fl::vector< EngineEntry > mDrivers
Shared drivers sorted by priority descending (higher values first)
bool waitForReady(u32 timeoutMs=1000) FL_NO_EXCEPT
Wait for all drivers to become READY.
const char * c_str() const FL_NO_EXCEPT
References EMPTY_NAME, FL_COLD, FL_DBG, fl::FL_NO_EXCEPT, FL_NO_INLINE, FL_WARN, mDrivers, NULL_DRIVER, and waitForReady().
Referenced by addDriver().