Files
genode-world/src/lib/protobuf/patches/03-thread.patch
Pirmin Duss e0f557c050 protobuf_grpc: google serializing and RPC library
protobuf : 3.9.3
grpc     : 1.24.0

This a new version of the port with a vastly reduced port size.

Issue #190
2019-11-26 14:11:04 +01:00

46 lines
2.0 KiB
Diff

diff --git a/src/google/protobuf/generated_message_util.cc b/src/google/protobuf/generated_message_util.cc
index 36d7307..04a565b 100644
--- a/src/google/protobuf/generated_message_util.cc
+++ b/src/google/protobuf/generated_message_util.cc
@@ -799,8 +799,8 @@ void InitSCCImpl(SCCInfoBase* scc) {
// Either the default in case no initialization is running or the id of the
// thread that is currently initializing.
#ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
- static std::atomic<std::thread::id> runner;
- auto me = std::this_thread::get_id();
+ static std::atomic<long long> runner = -1LL;
+ auto me = 1LL;
#else
// This is a lightweight replacement for std::thread::id. std::thread does not
// work on Windows XP SP2 with the latest VC++ libraries, because it utilizes
@@ -811,20 +811,20 @@ void InitSCCImpl(SCCInfoBase* scc) {
// This will only happen because the constructor will call InitSCC while
// constructing the default instance.
- if (runner.load(std::memory_order_relaxed) == me) {
- // Because we're in the process of constructing the default instance.
- // We can be assured that we're already exploring this SCC.
- GOOGLE_CHECK_EQ(scc->visit_status.load(std::memory_order_relaxed),
- SCCInfoBase::kRunning);
- return;
- }
+ if (runner.load(std::memory_order_relaxed) == me) {
+ // Because we're in the process of constructing the default instance.
+ // We can be assured that we're already exploring this SCC.
+ GOOGLE_CHECK_EQ(scc->visit_status.load(std::memory_order_relaxed),
+ SCCInfoBase::kRunning);
+ return;
+ }
InitProtobufDefaults();
mu.Lock();
- runner.store(me, std::memory_order_relaxed);
+ runner.store(me, std::memory_order_relaxed);
InitSCC_DFS(scc);
#ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
- runner.store(std::thread::id{}, std::memory_order_relaxed);
+ runner.store(0, std::memory_order_relaxed);
#else
runner.store(-1, std::memory_order_relaxed);
#endif // #ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP