event_engine.cc
Go to the documentation of this file.
1 // Copyright 2021 The gRPC Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 
16 #include <atomic>
17 #include <functional>
18 #include <memory>
19 #include <utility>
20 
22 
24 
25 namespace grpc_event_engine {
26 namespace experimental {
27 
28 namespace {
29 std::atomic<const std::function<std::unique_ptr<EventEngine>()>*>
30  g_event_engine_factory{nullptr};
31 std::atomic<EventEngine*> g_event_engine{nullptr};
32 } // namespace
33 
35  std::function<std::unique_ptr<EventEngine>()> factory) {
36  delete g_event_engine_factory.exchange(
37  new std::function<std::unique_ptr<EventEngine>()>(std::move(factory)));
38 }
39 
40 std::unique_ptr<EventEngine> CreateEventEngine() {
41  if (auto* factory = g_event_engine_factory.load()) {
42  return (*factory)();
43  }
45 }
46 
48  EventEngine* engine = g_event_engine.load(std::memory_order_acquire);
49  if (engine == nullptr) {
50  auto* created = CreateEventEngine().release();
51  if (g_event_engine.compare_exchange_strong(engine, created,
52  std::memory_order_acq_rel,
53  std::memory_order_acquire)) {
54  engine = created;
55  } else {
56  delete created;
57  }
58  }
59  return engine;
60 }
61 
63  delete g_event_engine.exchange(nullptr, std::memory_order_acq_rel);
64 }
65 
66 } // namespace experimental
67 } // namespace grpc_event_engine
grpc_event_engine::experimental::SetDefaultEventEngineFactory
void SetDefaultEventEngineFactory(std::function< std::unique_ptr< EventEngine >()> factory)
Definition: event_engine.cc:34
event_engine.h
grpc_event_engine::experimental::EventEngine
Definition: event_engine.h:74
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
grpc_event_engine::experimental::DefaultEventEngineFactory
std::unique_ptr< EventEngine > DefaultEventEngineFactory()
Create an EventEngine using the default factory provided at link time.
Definition: default_event_engine_factory.cc:28
grpc_event_engine::experimental::ResetDefaultEventEngine
void ResetDefaultEventEngine()
Reset the default event engine.
Definition: event_engine.cc:62
grpc_event_engine
Definition: endpoint_config.h:24
grpc_event_engine::experimental::GetDefaultEventEngine
EventEngine * GetDefaultEventEngine()
Definition: event_engine.cc:47
grpc_event_engine::experimental::CreateEventEngine
std::unique_ptr< EventEngine > CreateEventEngine()
Create an EventEngine using the default factory.
Definition: event_engine.cc:40
function
std::function< bool(GrpcTool *, int, const char **, const CliCredentials &, GrpcToolOutputCallback)> function
Definition: grpc_tool.cc:250
event_engine_factory.h
port_platform.h


grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:19