LoggerPtr Hierarchy::getLogger(const String& name, spi::LoggerFactoryPtr factory) { // Synchronize to prevent write conflicts. Read conflicts (in // getEffectiveLevel method) are possible only if variable // assignments are non-atomic. LoggerPtr logger; mapCs.lock(); LoggerMap::iterator it = loggers.find(name); if (it != loggers.end()) { logger = it->second; } else { logger = factory->makeNewLoggerInstance(name); logger->setHierarchy(this); loggers.insert(LoggerMap::value_type(name, logger)); ProvisionNodeMap::iterator it2 = provisionNodes.find(name); if (it2 != provisionNodes.end()) { updateChildren(it2->second, logger); provisionNodes.erase(it2); } updateParents(logger); } mapCs.unlock(); return logger; }