Ferenc Gerlits created MINIFICPP-1753:
-----------------------------------------
Summary: Remove the possibility of multiple initialization from
controller services
Key: MINIFICPP-1753
URL: https://issues.apache.org/jira/browse/MINIFICPP-1753
Project: Apache NiFi MiNiFi C++
Issue Type: Improvement
Reporter: Ferenc Gerlits
Quite a few controller services* use the pattern
{noformat}
void SomeService::initialize() {
if (initialized_)
return;
std::lock_guard<std::mutex> lock(initialization_mutex_);
ControllerService::initialize();
initializeProperties();
initialized_ = true;
}
{noformat}
with an atomic {{initialized_}} variable. This is probably intended as an
optimization to avoid locking the mutex, but that doesn't save much time, and
it can lead to the initialization being run multiple times.
Put the {{if (initialized_)}} check behind the lock, and change the type of
{{initialized_}} to a plain {{{}bool{}}}. This will make the code simpler and
it will make multiple initialization impossible, at the cost of making
{{initialize()}} run slightly slower when called a second or third time.
[*] CoapConnector, JavaControllerService, MQTTControllerService,
DatabaseService and SSLContextService do this for sure; please check if there
are any others
--
This message was sent by Atlassian Jira
(v8.20.1#820001)