| Index: third_party/protobuf/patches/0012-extract-globals.patch
|
| diff --git a/third_party/protobuf/patches/0012-extract-globals.patch b/third_party/protobuf/patches/0012-extract-globals.patch
|
| deleted file mode 100644
|
| index 6521c609bf777bd74539069018f4c07f5a4d0b44..0000000000000000000000000000000000000000
|
| --- a/third_party/protobuf/patches/0012-extract-globals.patch
|
| +++ /dev/null
|
| @@ -1,943 +0,0 @@
|
| -diff -ru --new-file protobuf/src/google/protobuf/arena.cc protobuf2/src/google/protobuf/arena.cc
|
| ---- protobuf/src/google/protobuf/arena.cc 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/arena.cc 2017-03-21 21:50:11.671241466 -0700
|
| -@@ -39,24 +39,18 @@
|
| - namespace protobuf {
|
| -
|
| -
|
| --google::protobuf::internal::SequenceNumber Arena::lifecycle_id_generator_;
|
| - #if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL)
|
| --Arena::ThreadCache& Arena::thread_cache() {
|
| -+Arena::ThreadCache& Arena::cr_thread_cache() {
|
| - static internal::ThreadLocalStorage<ThreadCache>* thread_cache_ =
|
| - new internal::ThreadLocalStorage<ThreadCache>();
|
| - return *thread_cache_->Get();
|
| - }
|
| --#elif defined(PROTOBUF_USE_DLLS)
|
| --Arena::ThreadCache& Arena::thread_cache() {
|
| -- static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_ = { -1, NULL };
|
| -- return thread_cache_;
|
| --}
|
| --#else
|
| -+#elif !defined(PROTOBUF_USE_DLLS)
|
| - GOOGLE_THREAD_LOCAL Arena::ThreadCache Arena::thread_cache_ = { -1, NULL };
|
| - #endif
|
| -
|
| - void Arena::Init() {
|
| -- lifecycle_id_ = lifecycle_id_generator_.GetNext();
|
| -+ lifecycle_id_ = internal::cr_lifecycle_id_generator_.GetNext();
|
| - blocks_ = 0;
|
| - hint_ = 0;
|
| - owns_first_block_ = true;
|
| -@@ -74,7 +68,7 @@
|
| - // Thread which calls Init() owns the first block. This allows the
|
| - // single-threaded case to allocate on the first block without taking any
|
| - // locks.
|
| -- first_block->owner = &thread_cache();
|
| -+ first_block->owner = &cr_thread_cache();
|
| - SetThreadCacheBlock(first_block);
|
| - AddBlockInternal(first_block);
|
| - owns_first_block_ = false;
|
| -@@ -99,7 +93,7 @@
|
| -
|
| - uint64 Arena::Reset() {
|
| - // Invalidate any ThreadCaches pointing to any blocks we just destroyed.
|
| -- lifecycle_id_ = lifecycle_id_generator_.GetNext();
|
| -+ lifecycle_id_ = internal::cr_lifecycle_id_generator_.GetNext();
|
| - return ResetInternal();
|
| - }
|
| -
|
| -@@ -184,18 +178,18 @@
|
| - // If this thread already owns a block in this arena then try to use that.
|
| - // This fast path optimizes the case where multiple threads allocate from the
|
| - // same arena.
|
| -- if (thread_cache().last_lifecycle_id_seen == lifecycle_id_ &&
|
| -- thread_cache().last_block_used_ != NULL) {
|
| -- if (thread_cache().last_block_used_->avail() < n) {
|
| -+ if (cr_thread_cache().last_lifecycle_id_seen == lifecycle_id_ &&
|
| -+ cr_thread_cache().last_block_used_ != NULL) {
|
| -+ if (cr_thread_cache().last_block_used_->avail() < n) {
|
| - return SlowAlloc(n);
|
| - }
|
| -- return AllocFromBlock(thread_cache().last_block_used_, n);
|
| -+ return AllocFromBlock(cr_thread_cache().last_block_used_, n);
|
| - }
|
| -
|
| - // Check whether we own the last accessed block on this arena.
|
| - // This fast path optimizes the case where a single thread uses multiple
|
| - // arenas.
|
| -- void* me = &thread_cache();
|
| -+ void* me = &cr_thread_cache();
|
| - Block* b = reinterpret_cast<Block*>(google::protobuf::internal::Acquire_Load(&hint_));
|
| - if (!b || b->owner != me || b->avail() < n) {
|
| - return SlowAlloc(n);
|
| -@@ -213,7 +207,7 @@
|
| - }
|
| -
|
| - void* Arena::SlowAlloc(size_t n) {
|
| -- void* me = &thread_cache();
|
| -+ void* me = &cr_thread_cache();
|
| - Block* b = FindBlock(me); // Find block owned by me.
|
| - // See if allocation fits in my latest block.
|
| - if (b != NULL && b->avail() >= n) {
|
| -@@ -290,7 +284,7 @@
|
| - // Thread which calls Reset() owns the first block. This allows the
|
| - // single-threaded case to allocate on the first block without taking any
|
| - // locks.
|
| -- first_block->owner = &thread_cache();
|
| -+ first_block->owner = &cr_thread_cache();
|
| - SetThreadCacheBlock(first_block);
|
| - AddBlockInternal(first_block);
|
| - }
|
| -diff -ru --new-file protobuf/src/google/protobuf/arena.h protobuf2/src/google/protobuf/arena.h
|
| ---- protobuf/src/google/protobuf/arena.h 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/arena.h 2017-03-21 21:50:11.671241466 -0700
|
| -@@ -70,6 +70,9 @@
|
| - template<typename Type>
|
| - class GenericTypeHandler; // repeated_field.h
|
| -
|
| -+LIBPROTOBUF_EXPORT extern google::protobuf::internal::SequenceNumber
|
| -+ cr_lifecycle_id_generator_;
|
| -+
|
| - // Templated cleanup methods.
|
| - template<typename T> void arena_destruct_object(void* object) {
|
| - reinterpret_cast<T*>(object)->~T();
|
| -@@ -552,19 +555,20 @@
|
| - };
|
| -
|
| - static const size_t kHeaderSize = sizeof(Block);
|
| -- static google::protobuf::internal::SequenceNumber lifecycle_id_generator_;
|
| - #if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL)
|
| - // Android ndk does not support GOOGLE_THREAD_LOCAL keyword so we use a custom thread
|
| - // local storage class we implemented.
|
| - // iOS also does not support the GOOGLE_THREAD_LOCAL keyword.
|
| -- static ThreadCache& thread_cache();
|
| -+ static ThreadCache& cr_thread_cache();
|
| - #elif defined(PROTOBUF_USE_DLLS)
|
| - // Thread local variables cannot be exposed through DLL interface but we can
|
| - // wrap them in static functions.
|
| -- static ThreadCache& thread_cache();
|
| -+ static ThreadCache& cr_thread_cache();
|
| - #else
|
| - static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_;
|
| -- static ThreadCache& thread_cache() { return thread_cache_; }
|
| -+ static ThreadCache& cr_thread_cache() {
|
| -+ return thread_cache_;
|
| -+ }
|
| - #endif
|
| -
|
| - // SFINAE for skipping addition to delete list for a message type when created
|
| -@@ -872,8 +876,8 @@
|
| - uint64 ResetInternal();
|
| -
|
| - inline void SetThreadCacheBlock(Block* block) {
|
| -- thread_cache().last_block_used_ = block;
|
| -- thread_cache().last_lifecycle_id_seen = lifecycle_id_;
|
| -+ cr_thread_cache().last_block_used_ = block;
|
| -+ cr_thread_cache().last_lifecycle_id_seen = lifecycle_id_;
|
| - }
|
| -
|
| - int64 lifecycle_id_; // Unique for each arena. Changes on Reset().
|
| -diff -ru --new-file protobuf/src/google/protobuf/extension_set.cc protobuf2/src/google/protobuf/extension_set.cc
|
| ---- protobuf/src/google/protobuf/extension_set.cc 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/extension_set.cc 2017-03-21 21:50:11.671241466 -0700
|
| -@@ -46,6 +46,12 @@
|
| - namespace protobuf {
|
| - namespace internal {
|
| -
|
| -+// Registry stuff.
|
| -+typedef hash_map<pair<const MessageLite*, int>, ExtensionInfo>
|
| -+ ExtensionRegistry;
|
| -+extern ExtensionRegistry* cr_registry_;
|
| -+extern ProtobufOnceType cr_registry_init_;
|
| -+
|
| - namespace {
|
| -
|
| - inline WireFormatLite::FieldType real_type(FieldType type) {
|
| -@@ -75,19 +81,13 @@
|
| - return false;
|
| - }
|
| -
|
| --// Registry stuff.
|
| --typedef hash_map<pair<const MessageLite*, int>,
|
| -- ExtensionInfo> ExtensionRegistry;
|
| --ExtensionRegistry* registry_ = NULL;
|
| --GOOGLE_PROTOBUF_DECLARE_ONCE(registry_init_);
|
| --
|
| - void DeleteRegistry() {
|
| -- delete registry_;
|
| -- registry_ = NULL;
|
| -+ delete cr_registry_;
|
| -+ cr_registry_ = NULL;
|
| - }
|
| -
|
| - void InitRegistry() {
|
| -- registry_ = new ExtensionRegistry;
|
| -+ cr_registry_ = new ExtensionRegistry;
|
| - OnShutdown(&DeleteRegistry);
|
| - }
|
| -
|
| -@@ -95,9 +95,9 @@
|
| - // safety.
|
| - void Register(const MessageLite* containing_type,
|
| - int number, ExtensionInfo info) {
|
| -- ::google::protobuf::GoogleOnceInit(®istry_init_, &InitRegistry);
|
| -+ ::google::protobuf::GoogleOnceInit(&cr_registry_init_, &InitRegistry);
|
| -
|
| -- if (!InsertIfNotPresent(registry_, std::make_pair(containing_type, number),
|
| -+ if (!InsertIfNotPresent(cr_registry_, std::make_pair(containing_type, number),
|
| - info)) {
|
| - GOOGLE_LOG(FATAL) << "Multiple extension registrations for type \""
|
| - << containing_type->GetTypeName()
|
| -@@ -107,9 +107,10 @@
|
| -
|
| - const ExtensionInfo* FindRegisteredExtension(
|
| - const MessageLite* containing_type, int number) {
|
| -- return (registry_ == NULL)
|
| -+ return (cr_registry_ == NULL)
|
| - ? NULL
|
| -- : FindOrNull(*registry_, std::make_pair(containing_type, number));
|
| -+ : FindOrNull(*cr_registry_,
|
| -+ std::make_pair(containing_type, number));
|
| - }
|
| -
|
| - } // namespace
|
| -@@ -1748,68 +1749,45 @@
|
| - // ==================================================================
|
| - // Default repeated field instances for iterator-compatible accessors
|
| -
|
| --GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_primitive_generic_type_traits_once_init_);
|
| --GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_string_type_traits_once_init_);
|
| --GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_message_generic_type_traits_once_init_);
|
| --
|
| - void RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields() {
|
| -- default_repeated_field_int32_ = new RepeatedField<int32>;
|
| -- default_repeated_field_int64_ = new RepeatedField<int64>;
|
| -- default_repeated_field_uint32_ = new RepeatedField<uint32>;
|
| -- default_repeated_field_uint64_ = new RepeatedField<uint64>;
|
| -- default_repeated_field_double_ = new RepeatedField<double>;
|
| -- default_repeated_field_float_ = new RepeatedField<float>;
|
| -- default_repeated_field_bool_ = new RepeatedField<bool>;
|
| -+ cr_default_repeated_field_int32_ = new RepeatedField<int32>;
|
| -+ cr_default_repeated_field_int64_ = new RepeatedField<int64>;
|
| -+ cr_default_repeated_field_uint32_ = new RepeatedField<uint32>;
|
| -+ cr_default_repeated_field_uint64_ = new RepeatedField<uint64>;
|
| -+ cr_default_repeated_field_double_ = new RepeatedField<double>;
|
| -+ cr_default_repeated_field_float_ = new RepeatedField<float>;
|
| -+ cr_default_repeated_field_bool_ = new RepeatedField<bool>;
|
| - OnShutdown(&DestroyDefaultRepeatedFields);
|
| - }
|
| -
|
| - void RepeatedPrimitiveGenericTypeTraits::DestroyDefaultRepeatedFields() {
|
| -- delete default_repeated_field_int32_;
|
| -- delete default_repeated_field_int64_;
|
| -- delete default_repeated_field_uint32_;
|
| -- delete default_repeated_field_uint64_;
|
| -- delete default_repeated_field_double_;
|
| -- delete default_repeated_field_float_;
|
| -- delete default_repeated_field_bool_;
|
| -+ delete cr_default_repeated_field_int32_;
|
| -+ delete cr_default_repeated_field_int64_;
|
| -+ delete cr_default_repeated_field_uint32_;
|
| -+ delete cr_default_repeated_field_uint64_;
|
| -+ delete cr_default_repeated_field_double_;
|
| -+ delete cr_default_repeated_field_float_;
|
| -+ delete cr_default_repeated_field_bool_;
|
| - }
|
| -
|
| - void RepeatedStringTypeTraits::InitializeDefaultRepeatedFields() {
|
| -- default_repeated_field_ = new RepeatedFieldType;
|
| -+ cr_default_repeated_field_ = new RepeatedFieldType;
|
| - OnShutdown(&DestroyDefaultRepeatedFields);
|
| - }
|
| -
|
| - void RepeatedStringTypeTraits::DestroyDefaultRepeatedFields() {
|
| -- delete default_repeated_field_;
|
| -+ delete cr_default_repeated_field_;
|
| - }
|
| -
|
| - void RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields() {
|
| -- default_repeated_field_ = new RepeatedFieldType;
|
| -+ cr_default_repeated_field_ = new RepeatedFieldType;
|
| - OnShutdown(&DestroyDefaultRepeatedFields);
|
| - }
|
| -
|
| - void RepeatedMessageGenericTypeTraits::DestroyDefaultRepeatedFields() {
|
| -- delete default_repeated_field_;
|
| -+ delete cr_default_repeated_field_;
|
| - }
|
| -
|
| --const RepeatedField<int32>*
|
| --RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int32_ = NULL;
|
| --const RepeatedField<int64>*
|
| --RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int64_ = NULL;
|
| --const RepeatedField<uint32>*
|
| --RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint32_ = NULL;
|
| --const RepeatedField<uint64>*
|
| --RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint64_ = NULL;
|
| --const RepeatedField<double>*
|
| --RepeatedPrimitiveGenericTypeTraits::default_repeated_field_double_ = NULL;
|
| --const RepeatedField<float>*
|
| --RepeatedPrimitiveGenericTypeTraits::default_repeated_field_float_ = NULL;
|
| --const RepeatedField<bool>*
|
| --RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_ = NULL;
|
| --const RepeatedStringTypeTraits::RepeatedFieldType*
|
| --RepeatedStringTypeTraits::default_repeated_field_ = NULL;
|
| --const RepeatedMessageGenericTypeTraits::RepeatedFieldType*
|
| --RepeatedMessageGenericTypeTraits::default_repeated_field_ = NULL;
|
| --
|
| - } // namespace internal
|
| - } // namespace protobuf
|
| - } // namespace google
|
| -diff -ru --new-file protobuf/src/google/protobuf/extension_set.h protobuf2/src/google/protobuf/extension_set.h
|
| ---- protobuf/src/google/protobuf/extension_set.h 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/extension_set.h 2017-03-21 21:50:11.679241474 -0700
|
| -@@ -731,13 +731,13 @@
|
| - template<typename Type> friend class RepeatedPrimitiveTypeTraits;
|
| - static void InitializeDefaultRepeatedFields();
|
| - static 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_;
|
| -- static const RepeatedField<uint64>* default_repeated_field_uint64_;
|
| -- static const RepeatedField<double>* default_repeated_field_double_;
|
| -- static const RepeatedField<float>* default_repeated_field_float_;
|
| -- static const RepeatedField<bool>* default_repeated_field_bool_;
|
| -+ static const RepeatedField<int32>* cr_default_repeated_field_int32_;
|
| -+ static const RepeatedField<int64>* cr_default_repeated_field_int64_;
|
| -+ static const RepeatedField<uint32>* cr_default_repeated_field_uint32_;
|
| -+ static const RepeatedField<uint64>* cr_default_repeated_field_uint64_;
|
| -+ static const RepeatedField<double>* cr_default_repeated_field_double_;
|
| -+ static const RepeatedField<float>* cr_default_repeated_field_float_;
|
| -+ static const RepeatedField<bool>* cr_default_repeated_field_bool_;
|
| - };
|
| -
|
| - #define PROTOBUF_DEFINE_PRIMITIVE_TYPE(TYPE, METHOD) \
|
| -@@ -769,7 +769,7 @@
|
| - &repeated_primitive_generic_type_traits_once_init_, \
|
| - &RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields); \
|
| - return RepeatedPrimitiveGenericTypeTraits:: \
|
| -- default_repeated_field_##TYPE##_; \
|
| -+ cr_default_repeated_field_##TYPE##_; \
|
| - } \
|
| - template<> inline const RepeatedField<TYPE>& \
|
| - RepeatedPrimitiveTypeTraits<TYPE>::GetRepeated(int number, \
|
| -@@ -821,7 +821,8 @@
|
| - }
|
| - };
|
| -
|
| --LIBPROTOBUF_EXPORT extern ProtobufOnceType repeated_string_type_traits_once_init_;
|
| -+LIBPROTOBUF_EXPORT extern ProtobufOnceType
|
| -+ cr_repeated_string_type_traits_once_init_;
|
| -
|
| - class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits {
|
| - public:
|
| -@@ -866,15 +867,16 @@
|
| - }
|
| -
|
| - static const RepeatedFieldType* GetDefaultRepeatedField() {
|
| -- ::google::protobuf::GoogleOnceInit(&repeated_string_type_traits_once_init_,
|
| -- &InitializeDefaultRepeatedFields);
|
| -- return default_repeated_field_;
|
| -+ ::google::protobuf::GoogleOnceInit(
|
| -+ &cr_repeated_string_type_traits_once_init_,
|
| -+ &InitializeDefaultRepeatedFields);
|
| -+ return cr_default_repeated_field_;
|
| - }
|
| -
|
| - private:
|
| - static void InitializeDefaultRepeatedFields();
|
| - static void DestroyDefaultRepeatedFields();
|
| -- static const RepeatedFieldType *default_repeated_field_;
|
| -+ static const RepeatedFieldType* cr_default_repeated_field_;
|
| - };
|
| -
|
| - // -------------------------------------------------------------------
|
| -@@ -1043,7 +1045,7 @@
|
| - template<typename Type> friend class RepeatedMessageTypeTraits;
|
| - static void InitializeDefaultRepeatedFields();
|
| - static void DestroyDefaultRepeatedFields();
|
| -- static const RepeatedFieldType* default_repeated_field_;
|
| -+ static const RepeatedFieldType* cr_default_repeated_field_;
|
| - };
|
| -
|
| - template<typename Type> inline
|
| -@@ -1053,7 +1055,7 @@
|
| - &repeated_message_generic_type_traits_once_init_,
|
| - &RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields);
|
| - return reinterpret_cast<const RepeatedFieldType*>(
|
| -- RepeatedMessageGenericTypeTraits::default_repeated_field_);
|
| -+ RepeatedMessageGenericTypeTraits::cr_default_repeated_field_);
|
| - }
|
| -
|
| - // -------------------------------------------------------------------
|
| -diff -ru --new-file protobuf/src/google/protobuf/generated_message_util.cc protobuf2/src/google/protobuf/generated_message_util.cc
|
| ---- protobuf/src/google/protobuf/generated_message_util.cc 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/generated_message_util.cc 2017-03-21 21:50:11.695241487 -0700
|
| -@@ -48,20 +48,18 @@
|
| - return std::numeric_limits<double>::quiet_NaN();
|
| - }
|
| -
|
| --const ::std::string* empty_string_;
|
| --GOOGLE_PROTOBUF_DECLARE_ONCE(empty_string_once_init_);
|
| --
|
| - void DeleteEmptyString() {
|
| -- delete empty_string_;
|
| -+ delete cr_empty_string_;
|
| - }
|
| -
|
| - void InitEmptyString() {
|
| -- empty_string_ = new string;
|
| -+ cr_empty_string_ = new string;
|
| - OnShutdown(&DeleteEmptyString);
|
| - }
|
| -
|
| - const ::std::string& GetEmptyString() {
|
| -- ::google::protobuf::GoogleOnceInit(&empty_string_once_init_, &InitEmptyString);
|
| -+ ::google::protobuf::GoogleOnceInit(&cr_empty_string_once_init_,
|
| -+ &InitEmptyString);
|
| - return GetEmptyStringAlreadyInited();
|
| - }
|
| -
|
| -diff -ru --new-file protobuf/src/google/protobuf/generated_message_util.h protobuf2/src/google/protobuf/generated_message_util.h
|
| ---- protobuf/src/google/protobuf/generated_message_util.h 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/generated_message_util.h 2017-03-21 21:50:11.659241456 -0700
|
| -@@ -77,14 +77,14 @@
|
| -
|
| - // Default empty string object. Don't use the pointer directly. Instead, call
|
| - // GetEmptyString() to get the reference.
|
| --LIBPROTOBUF_EXPORT extern const ::std::string* empty_string_;
|
| --LIBPROTOBUF_EXPORT extern ProtobufOnceType empty_string_once_init_;
|
| -+LIBPROTOBUF_EXPORT extern const ::std::string* cr_empty_string_;
|
| -+LIBPROTOBUF_EXPORT extern ProtobufOnceType cr_empty_string_once_init_;
|
| - LIBPROTOBUF_EXPORT void InitEmptyString();
|
| -
|
| -
|
| - LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyStringAlreadyInited() {
|
| -- assert(empty_string_ != NULL);
|
| -- return *empty_string_;
|
| -+ assert(cr_empty_string_ != NULL);
|
| -+ return *cr_empty_string_;
|
| - }
|
| -
|
| - LIBPROTOBUF_EXPORT const ::std::string& GetEmptyString();
|
| -diff -ru --new-file protobuf/src/google/protobuf/globals.cc protobuf2/src/google/protobuf/globals.cc
|
| ---- protobuf/src/google/protobuf/globals.cc 1969-12-31 16:00:00.000000000 -0800
|
| -+++ protobuf2/src/google/protobuf/globals.cc 2017-03-21 21:50:11.659241456 -0700
|
| -@@ -0,0 +1,122 @@
|
| -+// Protocol Buffers - Google's data interchange format
|
| -+// Copyright 2017 Google Inc. All rights reserved.
|
| -+// https://developers.google.com/protocol-buffers/
|
| -+//
|
| -+// Redistribution and use in source and binary forms, with or without
|
| -+// modification, are permitted provided that the following conditions are
|
| -+// met:
|
| -+//
|
| -+// * Redistributions of source code must retain the above copyright
|
| -+// notice, this list of conditions and the following disclaimer.
|
| -+// * Redistributions in binary form must reproduce the above
|
| -+// copyright notice, this list of conditions and the following disclaimer
|
| -+// in the documentation and/or other materials provided with the
|
| -+// distribution.
|
| -+// * Neither the name of Google Inc. nor the names of its
|
| -+// contributors may be used to endorse or promote products derived from
|
| -+// this software without specific prior written permission.
|
| -+//
|
| -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| -+
|
| -+#include <google/protobuf/arena.h>
|
| -+#include <google/protobuf/extension_set.h>
|
| -+#include <google/protobuf/generated_message_util.h>
|
| -+#include <google/protobuf/stubs/atomicops.h>
|
| -+#include <google/protobuf/stubs/hash.h>
|
| -+
|
| -+namespace google {
|
| -+namespace protobuf {
|
| -+
|
| -+#if !defined(GOOGLE_PROTOBUF_NO_THREADLOCAL) && defined(PROTOBUF_USE_DLLS)
|
| -+Arena::ThreadCache& Arena::cr_thread_cache() {
|
| -+ static GOOGLE_THREAD_LOCAL ThreadCache cr_thread_cache_ = {-1, NULL};
|
| -+ return cr_thread_cache_;
|
| -+}
|
| -+#endif
|
| -+
|
| -+namespace internal {
|
| -+
|
| -+SequenceNumber cr_lifecycle_id_generator_;
|
| -+
|
| -+const ::std::string* cr_empty_string_;
|
| -+GOOGLE_PROTOBUF_DECLARE_ONCE(cr_empty_string_once_init_);
|
| -+
|
| -+const RepeatedField<int32>*
|
| -+ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_int32_ = NULL;
|
| -+const RepeatedField<int64>*
|
| -+ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_int64_ = NULL;
|
| -+const RepeatedField<uint32>*
|
| -+ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_uint32_ =
|
| -+ NULL;
|
| -+const RepeatedField<uint64>*
|
| -+ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_uint64_ =
|
| -+ NULL;
|
| -+const RepeatedField<double>*
|
| -+ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_double_ =
|
| -+ NULL;
|
| -+const RepeatedField<float>*
|
| -+ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_float_ = NULL;
|
| -+const RepeatedField<bool>*
|
| -+ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_bool_ = NULL;
|
| -+const RepeatedStringTypeTraits::RepeatedFieldType*
|
| -+ RepeatedStringTypeTraits::cr_default_repeated_field_ = NULL;
|
| -+const RepeatedMessageGenericTypeTraits::RepeatedFieldType*
|
| -+ RepeatedMessageGenericTypeTraits::cr_default_repeated_field_ = NULL;
|
| -+
|
| -+LIBPROTOBUF_EXPORT vector<void (*)()>* cr_shutdown_functions = NULL;
|
| -+LIBPROTOBUF_EXPORT Mutex* cr_shutdown_functions_mutex = NULL;
|
| -+LIBPROTOBUF_EXPORT GOOGLE_PROTOBUF_DECLARE_ONCE(cr_shutdown_functions_init);
|
| -+
|
| -+LIBPROTOBUF_EXPORT LogHandler* cr_log_handler_ = NULL;
|
| -+LIBPROTOBUF_EXPORT int cr_log_silencer_count_ = 0;
|
| -+
|
| -+LIBPROTOBUF_EXPORT Mutex* cr_log_silencer_count_mutex_ = NULL;
|
| -+LIBPROTOBUF_EXPORT GOOGLE_PROTOBUF_DECLARE_ONCE(cr_log_silencer_count_init_);
|
| -+
|
| -+GOOGLE_PROTOBUF_DECLARE_ONCE(
|
| -+ cr_repeated_primitive_generic_type_traits_once_init_);
|
| -+GOOGLE_PROTOBUF_DECLARE_ONCE(cr_repeated_string_type_traits_once_init_);
|
| -+GOOGLE_PROTOBUF_DECLARE_ONCE(
|
| -+ cr_repeated_message_generic_type_traits_once_init_);
|
| -+
|
| -+LIBPROTOBUF_EXPORT hash_map<pair<const MessageLite*, int>, ExtensionInfo>*
|
| -+ cr_registry_ = NULL;
|
| -+LIBPROTOBUF_EXPORT GOOGLE_PROTOBUF_DECLARE_ONCE(cr_registry_init_);
|
| -+
|
| -+LIBPROTOBUF_EXPORT bool cr_module_initialized_ = false;
|
| -+struct InitDetector {
|
| -+ InitDetector() { cr_module_initialized_ = true; }
|
| -+};
|
| -+InitDetector cr_init_detector;
|
| -+
|
| -+#ifdef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_GCC_H_
|
| -+// Set the flags so that code will run correctly and conservatively, so even
|
| -+// if we haven't been initialized yet, we're probably single threaded, and our
|
| -+// default values should hopefully be pretty safe.
|
| -+LIBPROTOBUF_EXPORT struct AtomicOps_x86CPUFeatureStruct
|
| -+ cr_AtomicOps_Internalx86CPUFeatures = {
|
| -+ false, // bug can't exist before process spawns multiple threads
|
| -+ false, // no SSE2
|
| -+};
|
| -+
|
| -+class AtomicOpsx86Initializer {
|
| -+ public:
|
| -+ AtomicOpsx86Initializer() { AtomicOps_Internalx86CPUFeaturesInit(); }
|
| -+};
|
| -+
|
| -+AtomicOpsx86Initializer cr_g_initer;
|
| -+#endif
|
| -+
|
| -+} // namespace internal
|
| -+} // namespace protobuf
|
| -+} // namespace google
|
| -diff -ru --new-file protobuf/src/google/protobuf/io/coded_stream.cc protobuf2/src/google/protobuf/io/coded_stream.cc
|
| ---- protobuf/src/google/protobuf/io/coded_stream.cc 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/io/coded_stream.cc 2017-03-21 21:50:11.663241460 -0700
|
| -@@ -83,7 +83,7 @@
|
| - }
|
| -
|
| - // Static.
|
| --int CodedInputStream::default_recursion_limit_ = 100;
|
| -+int const CodedInputStream::default_recursion_limit_ = 100;
|
| -
|
| -
|
| - void CodedOutputStream::EnableAliasing(bool enabled) {
|
| -diff -ru --new-file protobuf/src/google/protobuf/io/coded_stream.h protobuf2/src/google/protobuf/io/coded_stream.h
|
| ---- protobuf/src/google/protobuf/io/coded_stream.h 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/io/coded_stream.h 2017-03-21 21:50:11.663241460 -0700
|
| -@@ -613,7 +613,7 @@
|
| -
|
| - static const int kDefaultTotalBytesWarningThreshold = 32 << 20; // 32MB
|
| -
|
| -- static int default_recursion_limit_; // 100 by default.
|
| -+ static const int default_recursion_limit_; // 100 by default.
|
| - };
|
| -
|
| - // Class which encodes and writes binary data which is composed of varint-
|
| -diff -ru --new-file protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc protobuf2/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc
|
| ---- protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc 2017-03-21 21:50:11.675241470 -0700
|
| -@@ -58,23 +58,13 @@
|
| - : "=a" (a), "=D" (b), "=c" (c), "=d" (d) : "a" (inp))
|
| - #endif
|
| -
|
| --#if defined(cpuid) // initialize the struct only on x86
|
| --
|
| - namespace google {
|
| - namespace protobuf {
|
| - namespace internal {
|
| -
|
| --// Set the flags so that code will run correctly and conservatively, so even
|
| --// if we haven't been initialized yet, we're probably single threaded, and our
|
| --// default values should hopefully be pretty safe.
|
| --struct AtomicOps_x86CPUFeatureStruct AtomicOps_Internalx86CPUFeatures = {
|
| -- false, // bug can't exist before process spawns multiple threads
|
| -- false, // no SSE2
|
| --};
|
| --
|
| --namespace {
|
| -+#if defined(cpuid) // initialize the struct only on x86
|
| -
|
| --// Initialize the AtomicOps_Internalx86CPUFeatures struct.
|
| -+// Initialize the cr_AtomicOps_Internalx86CPUFeatures struct.
|
| - void AtomicOps_Internalx86CPUFeaturesInit() {
|
| - uint32_t eax;
|
| - uint32_t ebx;
|
| -@@ -107,31 +97,20 @@
|
| - if (strcmp(vendor, "AuthenticAMD") == 0 && // AMD
|
| - family == 15 &&
|
| - 32 <= model && model <= 63) {
|
| -- AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = true;
|
| -+ cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = true;
|
| - } else {
|
| -- AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = false;
|
| -+ cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = false;
|
| - }
|
| -
|
| - // edx bit 26 is SSE2 which we use to tell use whether we can use mfence
|
| -- AtomicOps_Internalx86CPUFeatures.has_sse2 = ((edx >> 26) & 1);
|
| -+ cr_AtomicOps_Internalx86CPUFeatures.has_sse2 = ((edx >> 26) & 1);
|
| - }
|
| --
|
| --class AtomicOpsx86Initializer {
|
| -- public:
|
| -- AtomicOpsx86Initializer() {
|
| -- AtomicOps_Internalx86CPUFeaturesInit();
|
| -- }
|
| --};
|
| --
|
| --// A global to get use initialized on startup via static initialization :/
|
| --AtomicOpsx86Initializer g_initer;
|
| --
|
| --} // namespace
|
| -+#else
|
| -+void AtomicOps_Internalx86CPUFeaturesInit() {}
|
| -+#endif // __i386__
|
| -
|
| - } // namespace internal
|
| - } // namespace protobuf
|
| - } // namespace google
|
| -
|
| --#endif // __i386__
|
| --
|
| - #endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_GCC_H_
|
| -diff -ru --new-file protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h protobuf2/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h
|
| ---- protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h 2017-03-21 21:50:11.675241470 -0700
|
| -@@ -46,7 +46,9 @@
|
| - // after acquire compare-and-swap.
|
| - bool has_sse2; // Processor has SSE2.
|
| - };
|
| --extern struct AtomicOps_x86CPUFeatureStruct AtomicOps_Internalx86CPUFeatures;
|
| -+extern struct AtomicOps_x86CPUFeatureStruct cr_AtomicOps_Internalx86CPUFeatures;
|
| -+
|
| -+void AtomicOps_Internalx86CPUFeaturesInit();
|
| -
|
| - #define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory")
|
| -
|
| -@@ -89,7 +91,7 @@
|
| - : "+r" (temp), "+m" (*ptr)
|
| - : : "memory");
|
| - // temp now holds the old value of *ptr
|
| -- if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
|
| -+ if (cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
|
| - __asm__ __volatile__("lfence" : : : "memory");
|
| - }
|
| - return temp + increment;
|
| -@@ -99,7 +101,7 @@
|
| - Atomic32 old_value,
|
| - Atomic32 new_value) {
|
| - Atomic32 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value);
|
| -- if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
|
| -+ if (cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
|
| - __asm__ __volatile__("lfence" : : : "memory");
|
| - }
|
| - return x;
|
| -@@ -131,7 +133,7 @@
|
| - #else
|
| -
|
| - inline void MemoryBarrier() {
|
| -- if (AtomicOps_Internalx86CPUFeatures.has_sse2) {
|
| -+ if (cr_AtomicOps_Internalx86CPUFeatures.has_sse2) {
|
| - __asm__ __volatile__("mfence" : : : "memory");
|
| - } else { // mfence is faster but not present on PIII
|
| - Atomic32 x = 0;
|
| -@@ -140,7 +142,7 @@
|
| - }
|
| -
|
| - inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) {
|
| -- if (AtomicOps_Internalx86CPUFeatures.has_sse2) {
|
| -+ if (cr_AtomicOps_Internalx86CPUFeatures.has_sse2) {
|
| - *ptr = value;
|
| - __asm__ __volatile__("mfence" : : : "memory");
|
| - } else {
|
| -@@ -213,7 +215,7 @@
|
| - : "+r" (temp), "+m" (*ptr)
|
| - : : "memory");
|
| - // temp now contains the previous value of *ptr
|
| -- if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
|
| -+ if (cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
|
| - __asm__ __volatile__("lfence" : : : "memory");
|
| - }
|
| - return temp + increment;
|
| -@@ -270,7 +272,7 @@
|
| - Atomic64 old_value,
|
| - Atomic64 new_value) {
|
| - Atomic64 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value);
|
| -- if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
|
| -+ if (cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
|
| - __asm__ __volatile__("lfence" : : : "memory");
|
| - }
|
| - return x;
|
| -diff -ru --new-file protobuf/src/google/protobuf/stubs/common.cc protobuf2/src/google/protobuf/stubs/common.cc
|
| ---- protobuf/src/google/protobuf/stubs/common.cc 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/stubs/common.cc 2017-03-21 21:50:11.675241470 -0700
|
| -@@ -116,7 +116,8 @@
|
| - if (level < GOOGLE_PROTOBUF_MIN_LOG_LEVEL) {
|
| - return;
|
| - }
|
| -- static const char* level_names[] = {"INFO", "WARNING", "ERROR", "FATAL"};
|
| -+ static const char* const level_names[] = {"INFO", "WARNING", "ERROR",
|
| -+ "FATAL"};
|
| -
|
| - static const int android_log_levels[] = {
|
| - ANDROID_LOG_INFO, // LOG(INFO),
|
| -@@ -148,7 +149,8 @@
|
| - #else
|
| - void DefaultLogHandler(LogLevel level, const char* filename, int line,
|
| - const string& message) {
|
| -- static const char* level_names[] = { "INFO", "WARNING", "ERROR", "FATAL" };
|
| -+ static const char* const level_names[] = {"INFO", "WARNING", "ERROR",
|
| -+ "FATAL"};
|
| -
|
| - // We use fprintf() instead of cerr because we want this to work at static
|
| - // initialization time.
|
| -@@ -163,22 +165,22 @@
|
| - // Nothing.
|
| - }
|
| -
|
| --static LogHandler* log_handler_ = &DefaultLogHandler;
|
| --static int log_silencer_count_ = 0;
|
| -+extern LogHandler* cr_log_handler_;
|
| -+extern int cr_log_silencer_count_;
|
| -
|
| --static Mutex* log_silencer_count_mutex_ = NULL;
|
| --GOOGLE_PROTOBUF_DECLARE_ONCE(log_silencer_count_init_);
|
| -+extern Mutex* cr_log_silencer_count_mutex_;
|
| -+extern ProtobufOnceType cr_log_silencer_count_init_;
|
| -
|
| - void DeleteLogSilencerCount() {
|
| -- delete log_silencer_count_mutex_;
|
| -- log_silencer_count_mutex_ = NULL;
|
| -+ delete cr_log_silencer_count_mutex_;
|
| -+ cr_log_silencer_count_mutex_ = NULL;
|
| - }
|
| - void InitLogSilencerCount() {
|
| -- log_silencer_count_mutex_ = new Mutex;
|
| -+ cr_log_silencer_count_mutex_ = new Mutex;
|
| - OnShutdown(&DeleteLogSilencerCount);
|
| - }
|
| - void InitLogSilencerCountOnce() {
|
| -- GoogleOnceInit(&log_silencer_count_init_, &InitLogSilencerCount);
|
| -+ GoogleOnceInit(&cr_log_silencer_count_init_, &InitLogSilencerCount);
|
| - }
|
| -
|
| - LogMessage& LogMessage::operator<<(const string& value) {
|
| -@@ -246,12 +248,13 @@
|
| -
|
| - if (level_ != LOGLEVEL_FATAL) {
|
| - InitLogSilencerCountOnce();
|
| -- MutexLock lock(log_silencer_count_mutex_);
|
| -- suppress = log_silencer_count_ > 0;
|
| -+ MutexLock lock(cr_log_silencer_count_mutex_);
|
| -+ suppress = cr_log_silencer_count_ > 0;
|
| - }
|
| -
|
| - if (!suppress) {
|
| -- log_handler_(level_, filename_, line_, message_);
|
| -+ (cr_log_handler_ ? cr_log_handler_ : DefaultLogHandler)(level_, filename_,
|
| -+ line_, message_);
|
| - }
|
| -
|
| - if (level_ == LOGLEVEL_FATAL) {
|
| -@@ -270,28 +273,29 @@
|
| - } // namespace internal
|
| -
|
| - LogHandler* SetLogHandler(LogHandler* new_func) {
|
| -- LogHandler* old = internal::log_handler_;
|
| -+ LogHandler* old = internal::cr_log_handler_ ? internal::cr_log_handler_
|
| -+ : internal::DefaultLogHandler;
|
| - if (old == &internal::NullLogHandler) {
|
| - old = NULL;
|
| - }
|
| - if (new_func == NULL) {
|
| -- internal::log_handler_ = &internal::NullLogHandler;
|
| -+ internal::cr_log_handler_ = &internal::NullLogHandler;
|
| - } else {
|
| -- internal::log_handler_ = new_func;
|
| -+ internal::cr_log_handler_ = new_func;
|
| - }
|
| - return old;
|
| - }
|
| -
|
| - LogSilencer::LogSilencer() {
|
| - internal::InitLogSilencerCountOnce();
|
| -- MutexLock lock(internal::log_silencer_count_mutex_);
|
| -- ++internal::log_silencer_count_;
|
| -+ MutexLock lock(internal::cr_log_silencer_count_mutex_);
|
| -+ ++internal::cr_log_silencer_count_;
|
| - };
|
| -
|
| - LogSilencer::~LogSilencer() {
|
| - internal::InitLogSilencerCountOnce();
|
| -- MutexLock lock(internal::log_silencer_count_mutex_);
|
| -- --internal::log_silencer_count_;
|
| -+ MutexLock lock(internal::cr_log_silencer_count_mutex_);
|
| -+ --internal::cr_log_silencer_count_;
|
| - };
|
| -
|
| - // ===================================================================
|
| -@@ -407,23 +411,23 @@
|
| - namespace internal {
|
| -
|
| - typedef void OnShutdownFunc();
|
| --vector<void (*)()>* shutdown_functions = NULL;
|
| --Mutex* shutdown_functions_mutex = NULL;
|
| --GOOGLE_PROTOBUF_DECLARE_ONCE(shutdown_functions_init);
|
| -+extern vector<void (*)()>* cr_shutdown_functions;
|
| -+extern Mutex* cr_shutdown_functions_mutex;
|
| -+extern ProtobufOnceType cr_shutdown_functions_init;
|
| -
|
| - void InitShutdownFunctions() {
|
| -- shutdown_functions = new vector<void (*)()>;
|
| -- shutdown_functions_mutex = new Mutex;
|
| -+ cr_shutdown_functions = new vector<void (*)()>;
|
| -+ cr_shutdown_functions_mutex = new Mutex;
|
| - }
|
| -
|
| - inline void InitShutdownFunctionsOnce() {
|
| -- GoogleOnceInit(&shutdown_functions_init, &InitShutdownFunctions);
|
| -+ GoogleOnceInit(&cr_shutdown_functions_init, &InitShutdownFunctions);
|
| - }
|
| -
|
| - void OnShutdown(void (*func)()) {
|
| - InitShutdownFunctionsOnce();
|
| -- MutexLock lock(shutdown_functions_mutex);
|
| -- shutdown_functions->push_back(func);
|
| -+ MutexLock lock(cr_shutdown_functions_mutex);
|
| -+ cr_shutdown_functions->push_back(func);
|
| - }
|
| -
|
| - } // namespace internal
|
| -@@ -431,20 +435,20 @@
|
| - void ShutdownProtobufLibrary() {
|
| - internal::InitShutdownFunctionsOnce();
|
| -
|
| -- // We don't need to lock shutdown_functions_mutex because it's up to the
|
| -+ // We don't need to lock cr_shutdown_functions_mutex because it's up to the
|
| - // caller to make sure that no one is using the library before this is
|
| - // called.
|
| -
|
| - // Make it safe to call this multiple times.
|
| -- if (internal::shutdown_functions == NULL) return;
|
| -+ if (internal::cr_shutdown_functions == NULL) return;
|
| -
|
| -- for (int i = 0; i < internal::shutdown_functions->size(); i++) {
|
| -- internal::shutdown_functions->at(i)();
|
| -+ for (int i = 0; i < internal::cr_shutdown_functions->size(); i++) {
|
| -+ internal::cr_shutdown_functions->at(i)();
|
| - }
|
| -- delete internal::shutdown_functions;
|
| -- internal::shutdown_functions = NULL;
|
| -- delete internal::shutdown_functions_mutex;
|
| -- internal::shutdown_functions_mutex = NULL;
|
| -+ delete internal::cr_shutdown_functions;
|
| -+ internal::cr_shutdown_functions = NULL;
|
| -+ delete internal::cr_shutdown_functions_mutex;
|
| -+ internal::cr_shutdown_functions_mutex = NULL;
|
| - }
|
| -
|
| - #if PROTOBUF_USE_EXCEPTIONS
|
| -diff -ru --new-file protobuf/src/google/protobuf/stubs/structurally_valid.cc protobuf2/src/google/protobuf/stubs/structurally_valid.cc
|
| ---- protobuf/src/google/protobuf/stubs/structurally_valid.cc 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/stubs/structurally_valid.cc 2017-03-21 21:50:11.679241474 -0700
|
| -@@ -511,21 +511,10 @@
|
| - // UTF-8 strings. Since UTF-8 validation is only used for debugging
|
| - // anyway, we simply always return success if initialization hasn't
|
| - // occurred yet.
|
| --namespace {
|
| --
|
| --bool module_initialized_ = false;
|
| --
|
| --struct InitDetector {
|
| -- InitDetector() {
|
| -- module_initialized_ = true;
|
| -- }
|
| --};
|
| --InitDetector init_detector;
|
| --
|
| --} // namespace
|
| -+extern bool cr_module_initialized_;
|
| -
|
| - bool IsStructurallyValidUTF8(const char* buf, int len) {
|
| -- if (!module_initialized_) return true;
|
| -+ if (!cr_module_initialized_) return true;
|
| -
|
| - int bytes_consumed = 0;
|
| - UTF8GenericScanFastAscii(&utf8acceptnonsurrogates_obj,
|
| -@@ -534,7 +523,7 @@
|
| - }
|
| -
|
| - int UTF8SpnStructurallyValid(const StringPiece& str) {
|
| -- if (!module_initialized_) return str.size();
|
| -+ if (!cr_module_initialized_) return str.size();
|
| -
|
| - int bytes_consumed = 0;
|
| - UTF8GenericScanFastAscii(&utf8acceptnonsurrogates_obj,
|
| -diff -ru --new-file protobuf/src/google/protobuf/stubs/strutil.cc protobuf2/src/google/protobuf/stubs/strutil.cc
|
| ---- protobuf/src/google/protobuf/stubs/strutil.cc 2017-03-21 21:50:28.399255503 -0700
|
| -+++ protobuf2/src/google/protobuf/stubs/strutil.cc 2017-03-21 21:50:11.675241470 -0700
|
| -@@ -528,7 +528,7 @@
|
| - // Assumes that non-printable characters are escaped using octal sequences, and
|
| - // that UTF-8 bytes are not handled specially.
|
| - static inline size_t CEscapedLength(StringPiece src) {
|
| -- static char c_escaped_len[256] = {
|
| -+ static const char c_escaped_len[256] = {
|
| - 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 2, 4, 4, // \t, \n, \r
|
| - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
| - 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // ", '
|
| -@@ -891,7 +891,7 @@
|
| - char *FastHexToBuffer(int i, char* buffer) {
|
| - GOOGLE_CHECK(i >= 0) << "FastHexToBuffer() wants non-negative integers, not " << i;
|
| -
|
| -- static const char *hexdigits = "0123456789abcdef";
|
| -+ static const char hexdigits[] = "0123456789abcdef";
|
| - char *p = buffer + 21;
|
| - *p-- = '\0';
|
| - do {
|
| -@@ -902,7 +902,7 @@
|
| - }
|
| -
|
| - char *InternalFastHexToBuffer(uint64 value, char* buffer, int num_byte) {
|
| -- static const char *hexdigits = "0123456789abcdef";
|
| -+ static const char hexdigits[] = "0123456789abcdef";
|
| - buffer[num_byte] = '\0';
|
| - for (int i = num_byte - 1; i >= 0; i--) {
|
| - #ifdef _M_X64
|
|
|