Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: third_party/protobuf/src/google/protobuf/arena.cc

Issue 2885223002: Protobuf: Remove protobuf globals patch (Closed)
Patch Set: typo Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/protobuf/src/google/protobuf/arena.cc
diff --git a/third_party/protobuf/src/google/protobuf/arena.cc b/third_party/protobuf/src/google/protobuf/arena.cc
index 3ce17e343e93714711af34cc2f722eba116488b8..613e5897144151967594abc84da94bc610cb0ce2 100755
--- a/third_party/protobuf/src/google/protobuf/arena.cc
+++ b/third_party/protobuf/src/google/protobuf/arena.cc
@@ -39,18 +39,24 @@ namespace google {
namespace protobuf {
+google::protobuf::internal::SequenceNumber Arena::lifecycle_id_generator_;
#if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL)
-Arena::ThreadCache& Arena::cr_thread_cache() {
+Arena::ThreadCache& Arena::thread_cache() {
static internal::ThreadLocalStorage<ThreadCache>* thread_cache_ =
new internal::ThreadLocalStorage<ThreadCache>();
return *thread_cache_->Get();
}
-#elif !defined(PROTOBUF_USE_DLLS)
+#elif defined(PROTOBUF_USE_DLLS)
+Arena::ThreadCache& Arena::thread_cache() {
+ static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_ = { -1, NULL };
+ return thread_cache_;
+}
+#else
GOOGLE_THREAD_LOCAL Arena::ThreadCache Arena::thread_cache_ = { -1, NULL };
#endif
void Arena::Init() {
- lifecycle_id_ = internal::cr_lifecycle_id_generator_.GetNext();
+ lifecycle_id_ = lifecycle_id_generator_.GetNext();
blocks_ = 0;
hint_ = 0;
owns_first_block_ = true;
@@ -68,7 +74,7 @@ void Arena::Init() {
// 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 = &cr_thread_cache();
+ first_block->owner = &thread_cache();
SetThreadCacheBlock(first_block);
AddBlockInternal(first_block);
owns_first_block_ = false;
@@ -93,7 +99,7 @@ Arena::~Arena() {
uint64 Arena::Reset() {
// Invalidate any ThreadCaches pointing to any blocks we just destroyed.
- lifecycle_id_ = internal::cr_lifecycle_id_generator_.GetNext();
+ lifecycle_id_ = lifecycle_id_generator_.GetNext();
return ResetInternal();
}
@@ -178,18 +184,18 @@ void* Arena::AllocateAligned(const std::type_info* allocated, size_t n) {
// 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 (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) {
+ if (thread_cache().last_lifecycle_id_seen == lifecycle_id_ &&
+ thread_cache().last_block_used_ != NULL) {
+ if (thread_cache().last_block_used_->avail() < n) {
return SlowAlloc(n);
}
- return AllocFromBlock(cr_thread_cache().last_block_used_, n);
+ return AllocFromBlock(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 = &cr_thread_cache();
+ void* me = &thread_cache();
Block* b = reinterpret_cast<Block*>(google::protobuf::internal::Acquire_Load(&hint_));
if (!b || b->owner != me || b->avail() < n) {
return SlowAlloc(n);
@@ -207,7 +213,7 @@ void* Arena::AllocFromBlock(Block* b, size_t n) {
}
void* Arena::SlowAlloc(size_t n) {
- void* me = &cr_thread_cache();
+ void* me = &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) {
@@ -284,7 +290,7 @@ uint64 Arena::FreeBlocks() {
// 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 = &cr_thread_cache();
+ first_block->owner = &thread_cache();
SetThreadCacheBlock(first_block);
AddBlockInternal(first_block);
}
« no previous file with comments | « third_party/protobuf/src/google/protobuf/arena.h ('k') | third_party/protobuf/src/google/protobuf/extension_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698