From 1a34c92e73b191d990d48f34de0968cc014ab252 Mon Sep 17 00:00:00 2001 From: "kenton@google.com" Date: Thu, 6 Aug 2009 22:17:26 +0000 Subject: Make sure GeneratedMessageFactory is deleted on shutdown. --- src/google/protobuf/message.cc | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/google/protobuf/message.cc') diff --git a/src/google/protobuf/message.cc b/src/google/protobuf/message.cc index f4519cd2..4e5b662c 100644 --- a/src/google/protobuf/message.cc +++ b/src/google/protobuf/message.cc @@ -38,6 +38,7 @@ #include #include +#include #include #include #include @@ -210,14 +211,25 @@ class GeneratedMessageFactory : public MessageFactory { hash_map type_map_; }; +GeneratedMessageFactory* generated_message_factory_ = NULL; +GOOGLE_PROTOBUF_DECLARE_ONCE(generated_message_factory_once_init_); + +void ShutdownGeneratedMessageFactory() { + delete generated_message_factory_; +} + +void InitGeneratedMessageFactory() { + generated_message_factory_ = new GeneratedMessageFactory; + internal::OnShutdown(&ShutdownGeneratedMessageFactory); +} + GeneratedMessageFactory::GeneratedMessageFactory() {} GeneratedMessageFactory::~GeneratedMessageFactory() {} GeneratedMessageFactory* GeneratedMessageFactory::singleton() { - // No need for thread-safety here because this will be called at static - // initialization time. (And GCC4 makes this thread-safe anyway.) - static GeneratedMessageFactory* singleton = new GeneratedMessageFactory; - return singleton; + GoogleOnceInit(&generated_message_factory_once_init_, + &InitGeneratedMessageFactory); + return generated_message_factory_; } void GeneratedMessageFactory::RegisterFile( -- cgit v1.2.3