aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf
diff options
context:
space:
mode:
authorGravatar Jisi Liu <jisi.liu@gmail.com>2015-02-23 19:35:02 -0800
committerGravatar Jisi Liu <jisi.liu@gmail.com>2015-02-23 19:35:02 -0800
commit581be24606a925d038f382dc4c86256e2d29e001 (patch)
treed41aa8bb5d2e643edb6b58d532ac4be5ba4448ee /src/google/protobuf
parent7c43f1700c746ffb7118bd187503e022fba4a77e (diff)
parente70329c6c0a2a9ebbbd1038f076d823e730512a7 (diff)
Merge alpha branch 'review/v3.0.0-alpha-2'
Diffstat (limited to 'src/google/protobuf')
-rw-r--r--src/google/protobuf/compiler/command_line_interface_unittest.cc6
-rw-r--r--src/google/protobuf/compiler/java/java_message_field.cc1
-rw-r--r--src/google/protobuf/generated_message_reflection.cc6
-rw-r--r--src/google/protobuf/message.cc24
-rw-r--r--src/google/protobuf/stubs/singleton.h6
5 files changed, 42 insertions, 1 deletions
diff --git a/src/google/protobuf/compiler/command_line_interface_unittest.cc b/src/google/protobuf/compiler/command_line_interface_unittest.cc
index dbaaa405..64e877a3 100644
--- a/src/google/protobuf/compiler/command_line_interface_unittest.cc
+++ b/src/google/protobuf/compiler/command_line_interface_unittest.cc
@@ -64,6 +64,10 @@
#include <gtest/gtest.h>
+// Disable the whole test when we use tcmalloc for "draconian" heap checks, in
+// which case tcmalloc will print warnings that fail the plugin tests.
+#if !GOOGLE_PROTOBUF_HEAP_CHECK_DRACONIAN
+
namespace google {
namespace protobuf {
namespace compiler {
@@ -1663,3 +1667,5 @@ TEST_F(EncodeDecodeTest, ProtoParseError) {
} // namespace compiler
} // namespace protobuf
} // namespace google
+
+#endif // !GOOGLE_PROTOBUF_HEAP_CHECK_DRACONIAN
diff --git a/src/google/protobuf/compiler/java/java_message_field.cc b/src/google/protobuf/compiler/java/java_message_field.cc
index 538f1248..a2d12a38 100644
--- a/src/google/protobuf/compiler/java/java_message_field.cc
+++ b/src/google/protobuf/compiler/java/java_message_field.cc
@@ -718,6 +718,7 @@ GenerateBuilderMembers(io::Printer* printer) const {
" $oneof_name$_ = null;\n"
" }\n"
" $set_oneof_case_message$;\n"
+ " $on_changed$;\n"
" return $name$Builder_;\n"
"}\n");
}
diff --git a/src/google/protobuf/generated_message_reflection.cc b/src/google/protobuf/generated_message_reflection.cc
index b500b9c5..34826801 100644
--- a/src/google/protobuf/generated_message_reflection.cc
+++ b/src/google/protobuf/generated_message_reflection.cc
@@ -247,8 +247,14 @@ namespace {
UnknownFieldSet* empty_unknown_field_set_ = NULL;
GOOGLE_PROTOBUF_DECLARE_ONCE(empty_unknown_field_set_once_);
+void DeleteEmptyUnknownFieldSet() {
+ delete empty_unknown_field_set_;
+ empty_unknown_field_set_ = NULL;
+}
+
void InitEmptyUnknownFieldSet() {
empty_unknown_field_set_ = new UnknownFieldSet;
+ internal::OnShutdown(&DeleteEmptyUnknownFieldSet);
}
const UnknownFieldSet& GetEmptyUnknownFieldSet() {
diff --git a/src/google/protobuf/message.cc b/src/google/protobuf/message.cc
index afe95461..28955b35 100644
--- a/src/google/protobuf/message.cc
+++ b/src/google/protobuf/message.cc
@@ -441,6 +441,30 @@ const internal::RepeatedFieldAccessor* Reflection::RepeatedFieldAccessor(
}
namespace internal {
+namespace {
+void ShutdownRepeatedFieldAccessor() {
+ Singleton<internal::RepeatedFieldPrimitiveAccessor<int32> >::ShutDown();
+ Singleton<internal::RepeatedFieldPrimitiveAccessor<uint32> >::ShutDown();
+ Singleton<internal::RepeatedFieldPrimitiveAccessor<int64> >::ShutDown();
+ Singleton<internal::RepeatedFieldPrimitiveAccessor<uint64> >::ShutDown();
+ Singleton<internal::RepeatedFieldPrimitiveAccessor<float> >::ShutDown();
+ Singleton<internal::RepeatedFieldPrimitiveAccessor<double> >::ShutDown();
+ Singleton<internal::RepeatedFieldPrimitiveAccessor<bool> >::ShutDown();
+ Singleton<internal::RepeatedPtrFieldStringAccessor>::ShutDown();
+ Singleton<internal::RepeatedPtrFieldMessageAccessor>::ShutDown();
+ Singleton<internal::MapFieldAccessor>::ShutDown();
+};
+
+struct ShutdownRepeatedFieldRegister {
+ ShutdownRepeatedFieldRegister() {
+ OnShutdown(&ShutdownRepeatedFieldAccessor);
+ }
+} shutdown_;
+
+} // namesapce
+} // namespace internal
+
+namespace internal {
// Macro defined in repeated_field.h. We can only define the Message-specific
// GenericTypeHandler specializations here because we depend on Message, which
// is not part of proto2-lite hence is not available in repeated_field.h.
diff --git a/src/google/protobuf/stubs/singleton.h b/src/google/protobuf/stubs/singleton.h
index e123e4fe..9301f549 100644
--- a/src/google/protobuf/stubs/singleton.h
+++ b/src/google/protobuf/stubs/singleton.h
@@ -44,6 +44,10 @@ class Singleton {
GoogleOnceInit(&once_, &Singleton<T>::Init);
return instance_;
}
+ static void ShutDown() {
+ delete instance_;
+ instance_ = NULL;
+ }
private:
static void Init() {
instance_ = new T();
@@ -56,7 +60,7 @@ template<typename T>
ProtobufOnceType Singleton<T>::once_;
template<typename T>
-T* Singleton<T>::instance_;
+T* Singleton<T>::instance_ = NULL;
} // namespace internal
} // namespace protobuf
} // namespace google