diff --git a/src/google/protobuf/extension_set.cc b/src/google/protobuf/extension_set.cc index 1b9ec36cbb..f4786392bc 100644 --- a/src/google/protobuf/extension_set.cc +++ b/src/google/protobuf/extension_set.cc @@ -1622,6 +1622,9 @@ struct StaticDefaultRepeatedFieldsInitializer { StaticDefaultRepeatedFieldsInitializer() { InitializeDefaultRepeatedFields(); } + ~StaticDefaultRepeatedFieldsInitializer() { + DestroyDefaultRepeatedFields(); + } } static_repeated_fields_initializer; void InitializeDefaultRepeatedFields() { @@ -1645,6 +1648,18 @@ void InitializeDefaultRepeatedFields() { new RepeatedField; } +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 diff --git a/src/google/protobuf/extension_set.h b/src/google/protobuf/extension_set.h index 801eea68ca..d7ec519247 100644 --- a/src/google/protobuf/extension_set.h +++ b/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 friend class RepeatedPrimitiveTypeTraits; friend void InitializeDefaultRepeatedFields(); + friend void DestroyDefaultRepeatedFields(); static const RepeatedField* default_repeated_field_int32_; static const RepeatedField* default_repeated_field_int64_; static const RepeatedField* 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 friend class RepeatedMessageTypeTraits; friend void InitializeDefaultRepeatedFields(); + friend void DestroyDefaultRepeatedFields(); static const RepeatedFieldType* default_repeated_field_; };