From 674e92d314cd79b2f47eab22a7c3af8732feb93f Mon Sep 17 00:00:00 2001 From: Kenichiro IDA Date: Sat, 19 Dec 2015 10:14:42 +0900 Subject: Initialize singleton instance by GoogleOnceInit() --- src/google/protobuf/descriptor.cc | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src/google/protobuf/descriptor.cc') diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc index 07a6ca22..bd60806e 100644 --- a/src/google/protobuf/descriptor.cc +++ b/src/google/protobuf/descriptor.cc @@ -665,9 +665,31 @@ FileDescriptorTables::FileDescriptorTables() FileDescriptorTables::~FileDescriptorTables() {} +namespace { + +FileDescriptorTables* file_descriptor_tables_ = NULL; +GOOGLE_PROTOBUF_DECLARE_ONCE(file_descriptor_tables_once_init_); + +void DeleteFileDescriptorTables() { + delete file_descriptor_tables_; + file_descriptor_tables_ = NULL; +} + +void InitFileDescriptorTables() { + file_descriptor_tables_ = new FileDescriptorTables(); + internal::OnShutdown(&DeleteFileDescriptorTables); +} + +inline void InitFileDescriptorTablesOnce() { + ::google::protobuf::GoogleOnceInit( + &file_descriptor_tables_once_init_, &InitFileDescriptorTables); +} + +} // anonymous namespace + inline const FileDescriptorTables& FileDescriptorTables::GetEmptyInstance() { - static const FileDescriptorTables kEmpty; - return kEmpty; + InitFileDescriptorTablesOnce(); + return *file_descriptor_tables_; } void DescriptorPool::Tables::AddCheckpoint() { -- cgit v1.2.3