Commit dcaed1a0 by Abseil Team Committed by Copybara-Service

Add overrides to other functions which call Waiter::GetWaiter

PiperOrigin-RevId: 508124592
Change-Id: Ib183e6e241c81b2760e7f849f8af8e7e2c30ea42
parent 2de126cc
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
// This file is a no-op if the required LowLevelAlloc support is missing. // This file is a no-op if the required LowLevelAlloc support is missing.
#include "absl/base/internal/low_level_alloc.h" #include "absl/base/internal/low_level_alloc.h"
#include "absl/synchronization/internal/waiter.h"
#ifndef ABSL_LOW_LEVEL_ALLOC_MISSING #ifndef ABSL_LOW_LEVEL_ALLOC_MISSING
#include <string.h> #include <string.h>
...@@ -71,6 +72,9 @@ static intptr_t RoundUp(intptr_t addr, intptr_t align) { ...@@ -71,6 +72,9 @@ static intptr_t RoundUp(intptr_t addr, intptr_t align) {
void OneTimeInitThreadIdentity(base_internal::ThreadIdentity* identity) { void OneTimeInitThreadIdentity(base_internal::ThreadIdentity* identity) {
PerThreadSem::Init(identity); PerThreadSem::Init(identity);
identity->ticker.store(0, std::memory_order_relaxed);
identity->wait_start.store(0, std::memory_order_relaxed);
identity->is_idle.store(false, std::memory_order_relaxed);
} }
static void ResetThreadIdentityBetweenReuse( static void ResetThreadIdentityBetweenReuse(
......
...@@ -40,13 +40,6 @@ std::atomic<int> *PerThreadSem::GetThreadBlockedCounter() { ...@@ -40,13 +40,6 @@ std::atomic<int> *PerThreadSem::GetThreadBlockedCounter() {
return identity->blocked_count_ptr; return identity->blocked_count_ptr;
} }
void PerThreadSem::Init(base_internal::ThreadIdentity *identity) {
new (Waiter::GetWaiter(identity)) Waiter();
identity->ticker.store(0, std::memory_order_relaxed);
identity->wait_start.store(0, std::memory_order_relaxed);
identity->is_idle.store(false, std::memory_order_relaxed);
}
void PerThreadSem::Tick(base_internal::ThreadIdentity *identity) { void PerThreadSem::Tick(base_internal::ThreadIdentity *identity) {
const int ticker = const int ticker =
identity->ticker.fetch_add(1, std::memory_order_relaxed) + 1; identity->ticker.fetch_add(1, std::memory_order_relaxed) + 1;
...@@ -54,7 +47,7 @@ void PerThreadSem::Tick(base_internal::ThreadIdentity *identity) { ...@@ -54,7 +47,7 @@ void PerThreadSem::Tick(base_internal::ThreadIdentity *identity) {
const bool is_idle = identity->is_idle.load(std::memory_order_relaxed); const bool is_idle = identity->is_idle.load(std::memory_order_relaxed);
if (wait_start && (ticker - wait_start > Waiter::kIdlePeriods) && !is_idle) { if (wait_start && (ticker - wait_start > Waiter::kIdlePeriods) && !is_idle) {
// Wakeup the waiting thread since it is time for it to become idle. // Wakeup the waiting thread since it is time for it to become idle.
Waiter::GetWaiter(identity)->Poke(); ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPoke)(identity);
} }
} }
...@@ -64,11 +57,22 @@ ABSL_NAMESPACE_END ...@@ -64,11 +57,22 @@ ABSL_NAMESPACE_END
extern "C" { extern "C" {
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemInit)(
absl::base_internal::ThreadIdentity *identity) {
new (absl::synchronization_internal::Waiter::GetWaiter(identity))
absl::synchronization_internal::Waiter();
}
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)( ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)(
absl::base_internal::ThreadIdentity *identity) { absl::base_internal::ThreadIdentity *identity) {
absl::synchronization_internal::Waiter::GetWaiter(identity)->Post(); absl::synchronization_internal::Waiter::GetWaiter(identity)->Post();
} }
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPoke)(
absl::base_internal::ThreadIdentity *identity) {
absl::synchronization_internal::Waiter::GetWaiter(identity)->Poke();
}
ABSL_ATTRIBUTE_WEAK bool ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemWait)( ABSL_ATTRIBUTE_WEAK bool ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemWait)(
absl::synchronization_internal::KernelTimeout t) { absl::synchronization_internal::KernelTimeout t) {
bool timeout = false; bool timeout = false;
......
...@@ -64,7 +64,7 @@ class PerThreadSem { ...@@ -64,7 +64,7 @@ class PerThreadSem {
private: private:
// Create the PerThreadSem associated with "identity". Initializes count=0. // Create the PerThreadSem associated with "identity". Initializes count=0.
// REQUIRES: May only be called by ThreadIdentity. // REQUIRES: May only be called by ThreadIdentity.
static void Init(base_internal::ThreadIdentity* identity); static inline void Init(base_internal::ThreadIdentity* identity);
// Increments "identity"'s count. // Increments "identity"'s count.
static inline void Post(base_internal::ThreadIdentity* identity); static inline void Post(base_internal::ThreadIdentity* identity);
...@@ -91,12 +91,21 @@ ABSL_NAMESPACE_END ...@@ -91,12 +91,21 @@ ABSL_NAMESPACE_END
// By changing our extension points to be extern "C", we dodge this // By changing our extension points to be extern "C", we dodge this
// check. // check.
extern "C" { extern "C" {
void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemInit)(
absl::base_internal::ThreadIdentity* identity);
void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)( void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)(
absl::base_internal::ThreadIdentity* identity); absl::base_internal::ThreadIdentity* identity);
bool ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemWait)( bool ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemWait)(
absl::synchronization_internal::KernelTimeout t); absl::synchronization_internal::KernelTimeout t);
void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPoke)(
absl::base_internal::ThreadIdentity* identity);
} // extern "C" } // extern "C"
void absl::synchronization_internal::PerThreadSem::Init(
absl::base_internal::ThreadIdentity* identity) {
ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemInit)(identity);
}
void absl::synchronization_internal::PerThreadSem::Post( void absl::synchronization_internal::PerThreadSem::Post(
absl::base_internal::ThreadIdentity* identity) { absl::base_internal::ThreadIdentity* identity) {
ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)(identity); ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)(identity);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment