From 329d103b3e0f80fff5f9d1ed5a4be06d6f91b49f Mon Sep 17 00:00:00 2001 From: "liujisi@google.com" Date: Wed, 5 Dec 2012 06:18:10 +0000 Subject: Set pointers to NULL after shutdown, so the shutdown function can be called for multiple times. --- src/google/protobuf/compiler/cpp/cpp_message.cc | 6 ++-- .../protobuf/compiler/cpp/cpp_string_field.cc | 3 +- src/google/protobuf/compiler/plugin.pb.cc | 6 ++++ src/google/protobuf/descriptor.pb.cc | 40 ++++++++++++++++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/google/protobuf/compiler/cpp/cpp_message.cc b/src/google/protobuf/compiler/cpp/cpp_message.cc index 1ea4f13d..85f85a57 100644 --- a/src/google/protobuf/compiler/cpp/cpp_message.cc +++ b/src/google/protobuf/compiler/cpp/cpp_message.cc @@ -857,12 +857,14 @@ GenerateDefaultInstanceInitializer(io::Printer* printer) { void MessageGenerator:: GenerateShutdownCode(io::Printer* printer) { printer->Print( - "delete $classname$::default_instance_;\n", + "delete $classname$::default_instance_;\n" + "$classname$::default_instance_ = NULL;\n", "classname", classname_); if (HasDescriptorMethods(descriptor_->file())) { printer->Print( - "delete $classname$_reflection_;\n", + "delete $classname$_reflection_;\n" + "$classname$_reflection_ = NULL;\n", "classname", classname_); } diff --git a/src/google/protobuf/compiler/cpp/cpp_string_field.cc b/src/google/protobuf/compiler/cpp/cpp_string_field.cc index 9c0911ac..81d06549 100644 --- a/src/google/protobuf/compiler/cpp/cpp_string_field.cc +++ b/src/google/protobuf/compiler/cpp/cpp_string_field.cc @@ -251,7 +251,8 @@ void StringFieldGenerator:: GenerateShutdownCode(io::Printer* printer) const { if (!descriptor_->default_value_string().empty()) { printer->Print(variables_, - "delete $classname$::$default_variable$;\n"); + "delete $classname$::$default_variable$;\n" + "$classname$::$default_variable$ = NULL;\n"); } } diff --git a/src/google/protobuf/compiler/plugin.pb.cc b/src/google/protobuf/compiler/plugin.pb.cc index 65abeafc..874bf029 100644 --- a/src/google/protobuf/compiler/plugin.pb.cc +++ b/src/google/protobuf/compiler/plugin.pb.cc @@ -115,11 +115,17 @@ void protobuf_RegisterTypes(const ::std::string&) { void protobuf_ShutdownFile_google_2fprotobuf_2fcompiler_2fplugin_2eproto() { delete CodeGeneratorRequest::default_instance_; + CodeGeneratorRequest::default_instance_ = NULL; delete CodeGeneratorRequest_reflection_; + CodeGeneratorRequest_reflection_ = NULL; delete CodeGeneratorResponse::default_instance_; + CodeGeneratorResponse::default_instance_ = NULL; delete CodeGeneratorResponse_reflection_; + CodeGeneratorResponse_reflection_ = NULL; delete CodeGeneratorResponse_File::default_instance_; + CodeGeneratorResponse_File::default_instance_ = NULL; delete CodeGeneratorResponse_File_reflection_; + CodeGeneratorResponse_File_reflection_ = NULL; } void protobuf_AddDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto() { diff --git a/src/google/protobuf/descriptor.pb.cc b/src/google/protobuf/descriptor.pb.cc index 65379f4d..c350d455 100644 --- a/src/google/protobuf/descriptor.pb.cc +++ b/src/google/protobuf/descriptor.pb.cc @@ -518,45 +518,85 @@ void protobuf_RegisterTypes(const ::std::string&) { void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto() { delete FileDescriptorSet::default_instance_; + FileDescriptorSet::default_instance_ = NULL; delete FileDescriptorSet_reflection_; + FileDescriptorSet_reflection_ = NULL; delete FileDescriptorProto::default_instance_; + FileDescriptorProto::default_instance_ = NULL; delete FileDescriptorProto_reflection_; + FileDescriptorProto_reflection_ = NULL; delete DescriptorProto::default_instance_; + DescriptorProto::default_instance_ = NULL; delete DescriptorProto_reflection_; + DescriptorProto_reflection_ = NULL; delete DescriptorProto_ExtensionRange::default_instance_; + DescriptorProto_ExtensionRange::default_instance_ = NULL; delete DescriptorProto_ExtensionRange_reflection_; + DescriptorProto_ExtensionRange_reflection_ = NULL; delete FieldDescriptorProto::default_instance_; + FieldDescriptorProto::default_instance_ = NULL; delete FieldDescriptorProto_reflection_; + FieldDescriptorProto_reflection_ = NULL; delete EnumDescriptorProto::default_instance_; + EnumDescriptorProto::default_instance_ = NULL; delete EnumDescriptorProto_reflection_; + EnumDescriptorProto_reflection_ = NULL; delete EnumValueDescriptorProto::default_instance_; + EnumValueDescriptorProto::default_instance_ = NULL; delete EnumValueDescriptorProto_reflection_; + EnumValueDescriptorProto_reflection_ = NULL; delete ServiceDescriptorProto::default_instance_; + ServiceDescriptorProto::default_instance_ = NULL; delete ServiceDescriptorProto_reflection_; + ServiceDescriptorProto_reflection_ = NULL; delete MethodDescriptorProto::default_instance_; + MethodDescriptorProto::default_instance_ = NULL; delete MethodDescriptorProto_reflection_; + MethodDescriptorProto_reflection_ = NULL; delete FileOptions::default_instance_; + FileOptions::default_instance_ = NULL; delete FileOptions_reflection_; + FileOptions_reflection_ = NULL; delete MessageOptions::default_instance_; + MessageOptions::default_instance_ = NULL; delete MessageOptions_reflection_; + MessageOptions_reflection_ = NULL; delete FieldOptions::default_instance_; + FieldOptions::default_instance_ = NULL; delete FieldOptions_reflection_; + FieldOptions_reflection_ = NULL; delete EnumOptions::default_instance_; + EnumOptions::default_instance_ = NULL; delete EnumOptions_reflection_; + EnumOptions_reflection_ = NULL; delete EnumValueOptions::default_instance_; + EnumValueOptions::default_instance_ = NULL; delete EnumValueOptions_reflection_; + EnumValueOptions_reflection_ = NULL; delete ServiceOptions::default_instance_; + ServiceOptions::default_instance_ = NULL; delete ServiceOptions_reflection_; + ServiceOptions_reflection_ = NULL; delete MethodOptions::default_instance_; + MethodOptions::default_instance_ = NULL; delete MethodOptions_reflection_; + MethodOptions_reflection_ = NULL; delete UninterpretedOption::default_instance_; + UninterpretedOption::default_instance_ = NULL; delete UninterpretedOption_reflection_; + UninterpretedOption_reflection_ = NULL; delete UninterpretedOption_NamePart::default_instance_; + UninterpretedOption_NamePart::default_instance_ = NULL; delete UninterpretedOption_NamePart_reflection_; + UninterpretedOption_NamePart_reflection_ = NULL; delete SourceCodeInfo::default_instance_; + SourceCodeInfo::default_instance_ = NULL; delete SourceCodeInfo_reflection_; + SourceCodeInfo_reflection_ = NULL; delete SourceCodeInfo_Location::default_instance_; + SourceCodeInfo_Location::default_instance_ = NULL; delete SourceCodeInfo_Location_reflection_; + SourceCodeInfo_Location_reflection_ = NULL; } void protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto() { -- cgit v1.2.3