From 8ded96246f4c2276fb24c07fbddc1dfeaff65917 Mon Sep 17 00:00:00 2001 From: sebaszm <45654185+sebaszm@users.noreply.github.com> Date: Wed, 4 Sep 2024 21:27:35 +0200 Subject: [PATCH] [ProcessContainers] Eliminate dynamic producer alloc (#1735) --- .../processcontainers/ContainerAdministrator.h | 11 ++++++----- .../extensions/processcontainers/ContainerProducer.h | 8 ++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Source/extensions/processcontainers/ContainerAdministrator.h b/Source/extensions/processcontainers/ContainerAdministrator.h index 31e33afdf..d4409a80f 100644 --- a/Source/extensions/processcontainers/ContainerAdministrator.h +++ b/Source/extensions/processcontainers/ContainerAdministrator.h @@ -77,20 +77,21 @@ namespace ProcessContainers { friend class ContainerProducerRegistrationType; private: - template - void Announce(const IContainer::containertype& type) + void Announce(const IContainer::containertype type, IContainerProducer* producer) { + ASSERT(producer != nullptr); + _adminLock.Lock(); ASSERT(_producers.find(type) == _producers.end()); // Announce another container runtime... - _producers.emplace(type, new PRODUCER()); + _producers.emplace(type, producer); _adminLock.Unlock(); } - void Revoke(const IContainer::containertype& type) + void Revoke(const IContainer::containertype type) { _adminLock.Lock(); @@ -104,7 +105,7 @@ namespace ProcessContainers { private: mutable Core::CriticalSection _adminLock; - std::map> _producers; + std::map _producers; Core::ProxyListType _containers; }; diff --git a/Source/extensions/processcontainers/ContainerProducer.h b/Source/extensions/processcontainers/ContainerProducer.h index 28d942f84..479f23852 100644 --- a/Source/extensions/processcontainers/ContainerProducer.h +++ b/Source/extensions/processcontainers/ContainerProducer.h @@ -36,16 +36,20 @@ namespace ProcessContainers { ContainerProducerRegistrationType& operator=(ContainerProducerRegistrationType&&) = delete; ContainerProducerRegistrationType() + : _producer() { - ContainerAdministrator::Instance().Announce(CONTAINERTYPE); + ContainerAdministrator::Instance().Announce(CONTAINERTYPE, &_producer); } ~ContainerProducerRegistrationType() { ContainerAdministrator::Instance().Revoke(CONTAINERTYPE); } + + private: + PRODUCER _producer; }; -} +} // namespace ProcessContainers } \ No newline at end of file