diff options
author | Feng Xiao <xfxyjwf@gmail.com> | 2014-10-09 10:25:47 -0700 |
---|---|---|
committer | Feng Xiao <xfxyjwf@gmail.com> | 2014-10-09 10:25:47 -0700 |
commit | 5452bd6e39ca7586c33bf8760ed5dbe20a39d5cf (patch) | |
tree | ce3933df571323e9e3fedbfad3de56ce92114034 | |
parent | 3b8dadf5814157a656d60dccadd7cb820a429050 (diff) | |
parent | e670b670328561aa7b3754ee0c023085949378a8 (diff) | |
download | protobuf-5452bd6e39ca7586c33bf8760ed5dbe20a39d5cf.tar.gz protobuf-5452bd6e39ca7586c33bf8760ed5dbe20a39d5cf.tar.bz2 protobuf-5452bd6e39ca7586c33bf8760ed5dbe20a39d5cf.zip |
Merge pull request #43 from abuszta/bugfix
Release objects allocated by InitializeDefaultRepeatedFields()
-rw-r--r-- | src/google/protobuf/extension_set.cc | 13 | ||||
-rw-r--r-- | src/google/protobuf/extension_set.h | 4 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/google/protobuf/extension_set.cc b/src/google/protobuf/extension_set.cc index 1b9ec36c..274554b5 100644 --- a/src/google/protobuf/extension_set.cc +++ b/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 diff --git a/src/google/protobuf/extension_set.h b/src/google/protobuf/extension_set.h index 801eea68..d7ec5192 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<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_; }; |