aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFeng Xiao <xfxyjwf@gmail.com>2014-10-09 10:25:47 -0700
committerFeng Xiao <xfxyjwf@gmail.com>2014-10-09 10:25:47 -0700
commit5452bd6e39ca7586c33bf8760ed5dbe20a39d5cf (patch)
treece3933df571323e9e3fedbfad3de56ce92114034
parent3b8dadf5814157a656d60dccadd7cb820a429050 (diff)
parente670b670328561aa7b3754ee0c023085949378a8 (diff)
downloadprotobuf-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.cc13
-rw-r--r--src/google/protobuf/extension_set.h4
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_;
};