Browse Source

Merge remote-tracking branch 'origin/master' into 2.6.1

Feng Xiao 11 years ago
parent
commit
5ac39f34ae
2 changed files with 17 additions and 0 deletions
  1. 13 0
      src/google/protobuf/extension_set.cc
  2. 4 0
      src/google/protobuf/extension_set.h

+ 13 - 0
src/google/protobuf/extension_set.cc

@@ -1621,6 +1621,7 @@ PROTOBUF_DEFINE_DEFAULT_REPEATED(bool)
 struct StaticDefaultRepeatedFieldsInitializer {
   StaticDefaultRepeatedFieldsInitializer() {
     InitializeDefaultRepeatedFields();
+    OnShutdown(&DestroyDefaultRepeatedFields);
   }
 } static_repeated_fields_initializer;
 
@@ -1645,6 +1646,18 @@ void InitializeDefaultRepeatedFields() {
       new RepeatedField<bool>;
 }
 
+void DestroyDefaultRepeatedFields() {
+  delete RepeatedStringTypeTraits::default_repeated_field_;
+  delete RepeatedMessageGenericTypeTraits::default_repeated_field_;
+  delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int32_;
+  delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int64_;
+  delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint32_;
+  delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint64_;
+  delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_double_;
+  delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_float_;
+  delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_;
+}
+
 }  // namespace internal
 }  // namespace protobuf
 }  // namespace google

+ 4 - 0
src/google/protobuf/extension_set.h

@@ -704,11 +704,13 @@ class RepeatedPrimitiveTypeTraits {
 
 // Declared here so that this can be friended below.
 void InitializeDefaultRepeatedFields();
+void DestroyDefaultRepeatedFields();
 
 class LIBPROTOBUF_EXPORT RepeatedPrimitiveGenericTypeTraits {
  private:
   template<typename Type> friend class RepeatedPrimitiveTypeTraits;
   friend void InitializeDefaultRepeatedFields();
+  friend void DestroyDefaultRepeatedFields();
   static const RepeatedField<int32>* default_repeated_field_int32_;
   static const RepeatedField<int64>* default_repeated_field_int64_;
   static const RepeatedField<uint32>* default_repeated_field_uint32_;
@@ -844,6 +846,7 @@ class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits {
 
  private:
   friend void InitializeDefaultRepeatedFields();
+  friend void DestroyDefaultRepeatedFields();
   static const RepeatedFieldType *default_repeated_field_;
 };
 
@@ -1010,6 +1013,7 @@ class LIBPROTOBUF_EXPORT RepeatedMessageGenericTypeTraits {
  private:
   template<typename Type> friend class RepeatedMessageTypeTraits;
   friend void InitializeDefaultRepeatedFields();
+  friend void DestroyDefaultRepeatedFields();
   static const RepeatedFieldType* default_repeated_field_;
 };