Go to the documentation of this file.
19 #include "absl/memory/memory.h"
20 #include "absl/utility/utility.h"
48 if (g_injector ==
nullptr) {
49 g_original_vtable->
connect(
closure, ep, interested_parties, channel_args,
53 g_injector->HandleConnection(
closure, ep, interested_parties, channel_args,
63 bool TcpConnectCancel(
int64_t ) {
return false; }
94 g_original_vtable->
connect(
closure, ep, interested_parties, channel_args,
106 : attempt_(
closure, ep, interested_parties, channel_args,
addr, deadline) {
117 self->attempt_.Resume();
138 bool intercept_completion)
139 : injector_(injector),
141 intercept_completion_(intercept_completion) {}
146 while (queued_attempt_ ==
nullptr) {
147 start_cv_.Wait(&injector_->mu_);
155 std::unique_ptr<QueuedAttempt> attempt;
166 std::unique_ptr<QueuedAttempt> attempt;
171 attempt->Fail(
error);
176 "=== WAITING FOR CONNECTION COMPLETION ON PORT %d ===",
port_);
178 while (original_on_complete_ !=
nullptr) {
179 complete_cv_.Wait(&injector_->mu_);
186 return !start_cv_.WaitWithDeadline(&injector_->mu_,
absl::Now());
191 auto*
self =
static_cast<Hold*
>(
arg);
195 on_complete =
self->original_on_complete_;
196 self->original_on_complete_ =
nullptr;
197 self->complete_cv_.Signal();
207 int port,
bool intercept_completion) {
209 auto hold = absl::make_unique<Hold>(
this,
port, intercept_completion);
210 holds_.push_back(hold.get());
231 hold->queued_attempt_ = absl::make_unique<QueuedAttempt>(
232 closure, ep, interested_parties, channel_args,
addr, deadline);
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
void HandleConnection(grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, const grpc_resolved_address *addr, grpc_core::Timestamp deadline) override
struct grpc_pollset_set grpc_pollset_set
grpc_tcp_client_vtable * grpc_tcp_client_impl
InjectedDelay(grpc_core::Duration duration, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, const grpc_resolved_address *addr, grpc_core::Timestamp deadline)
#define ABSL_GUARDED_BY(x)
void HandleConnection(grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, const grpc_resolved_address *addr, grpc_core::Timestamp deadline) override
static void TimerCallback(void *arg, grpc_error_handle)
grpc_closure timer_callback_
Hold(ConnectionHoldInjector *injector, int port, bool intercept_completion)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
virtual ~ConnectionAttemptInjector()
virtual void BeforeResumingAction()
static void AttemptConnection(grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, const grpc_resolved_address *addr, grpc_core::Timestamp deadline)
grpc_core::CondVar start_cv_
int grpc_sockaddr_get_port(const grpc_resolved_address *resolved_addr)
ABSL_NAMESPACE_BEGIN Time Now()
#define GRPC_ERROR_REF(err)
grpc_core::ExecCtx exec_ctx
grpc_closure * original_on_complete_
int64_t(* connect)(grpc_closure *on_connect, grpc_endpoint **endpoint, grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, const grpc_resolved_address *addr, grpc_core::Timestamp deadline)
void grpc_timer_init(grpc_timer *timer, grpc_core::Timestamp deadline, grpc_closure *closure)
const bool intercept_completion_
std::vector< Hold * > holds_
void Fail(grpc_error_handle error)
grpc_closure on_complete_
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
std::unique_ptr< Hold > AddHold(int port, bool intercept_completion=false)
static void OnComplete(void *arg, grpc_error_handle error)
static void Run(const DebugLocation &location, grpc_closure *closure, grpc_error_handle error)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:01