|  | @@ -560,7 +560,7 @@ class FileDescriptorTables {
 | 
	
		
			
				|  |  |    ~FileDescriptorTables();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Empty table, used with placeholder files.
 | 
	
		
			
				|  |  | -  static const FileDescriptorTables kEmpty;
 | 
	
		
			
				|  |  | +  inline static const FileDescriptorTables& GetEmptyInstance();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // -----------------------------------------------------------------
 | 
	
		
			
				|  |  |    // Finding items.
 | 
	
	
		
			
				|  | @@ -665,7 +665,32 @@ FileDescriptorTables::FileDescriptorTables()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  FileDescriptorTables::~FileDescriptorTables() {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const FileDescriptorTables FileDescriptorTables::kEmpty;
 | 
	
		
			
				|  |  | +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() {
 | 
	
		
			
				|  |  | +  InitFileDescriptorTablesOnce();
 | 
	
		
			
				|  |  | +  return *file_descriptor_tables_;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void DescriptorPool::Tables::AddCheckpoint() {
 | 
	
		
			
				|  |  |    checkpoints_.push_back(CheckPoint(this));
 | 
	
	
		
			
				|  | @@ -3535,7 +3560,7 @@ FileDescriptor* DescriptorBuilder::NewPlaceholderFile(
 | 
	
		
			
				|  |  |    placeholder->package_ = &internal::GetEmptyString();
 | 
	
		
			
				|  |  |    placeholder->pool_ = pool_;
 | 
	
		
			
				|  |  |    placeholder->options_ = &FileOptions::default_instance();
 | 
	
		
			
				|  |  | -  placeholder->tables_ = &FileDescriptorTables::kEmpty;
 | 
	
		
			
				|  |  | +  placeholder->tables_ = &FileDescriptorTables::GetEmptyInstance();
 | 
	
		
			
				|  |  |    placeholder->source_code_info_ = &SourceCodeInfo::default_instance();
 | 
	
		
			
				|  |  |    placeholder->is_placeholder_ = true;
 | 
	
		
			
				|  |  |    placeholder->syntax_ = FileDescriptor::SYNTAX_PROTO2;
 |