From 782e716ea6bb22e10e1aa1bc08d170e0df225aea Mon Sep 17 00:00:00 2001 From: Andrzej Serazetdinow Date: Sat, 25 Dec 2021 13:50:35 +0100 Subject: [PATCH] Exceptions for std::make_shared I would like a way to actually know without abort that logger failed to allocate for whatever reason --- include/spdlog/details/synchronous_factory.h | 23 +++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/include/spdlog/details/synchronous_factory.h b/include/spdlog/details/synchronous_factory.h index 1f729ab9..aea19f5e 100644 --- a/include/spdlog/details/synchronous_factory.h +++ b/include/spdlog/details/synchronous_factory.h @@ -15,10 +15,27 @@ struct synchronous_factory template static std::shared_ptr create(std::string logger_name, SinkArgs &&... args) { - auto sink = std::make_shared(std::forward(args)...); - auto new_logger = std::make_shared(std::move(logger_name), std::move(sink)); + std::shared_ptr NewLogger; + try + { + auto sink = std::make_shared(std::forward(args)...); + } + catch(std::bad_alloc& exc) + { + return NewLogger; + } + + try + { + auto new_logger = std::make_shared(std::move(logger_name), std::move(sink)); + } + catch(std::bad_alloc& exc) + { + return NewLogger; + } + details::registry::instance().initialize_logger(new_logger); - return new_logger; + return NewLogger; } }; } // namespace spdlog