diff --git a/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc b/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc index 1d80104f663..f448108a390 100644 --- a/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +++ b/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc @@ -85,7 +85,9 @@ bool ThreadyEventEngine::IsWorkerThread() { absl::StatusOr> ThreadyEventEngine::GetDNSResolver( const DNSResolver::ResolverOptions& options) { - return std::make_unique(*impl_->GetDNSResolver(options)); + return std::make_unique( + *impl_->GetDNSResolver(options), + std::static_pointer_cast(shared_from_this())); } void ThreadyEventEngine::Run(Closure* closure) { @@ -116,10 +118,10 @@ void ThreadyEventEngine::ThreadyDNSResolver::LookupHostname( LookupHostnameCallback on_resolve, absl::string_view name, absl::string_view default_port) { return impl_->LookupHostname( - [this, on_resolve = std::move(on_resolve)]( + [engine = engine_, on_resolve = std::move(on_resolve)]( absl::StatusOr> addresses) mutable { - engine_->Asynchronously([on_resolve = std::move(on_resolve), - addresses = std::move(addresses)]() mutable { + engine->Asynchronously([on_resolve = std::move(on_resolve), + addresses = std::move(addresses)]() mutable { on_resolve(std::move(addresses)); }); }, @@ -129,13 +131,12 @@ void ThreadyEventEngine::ThreadyDNSResolver::LookupHostname( void ThreadyEventEngine::ThreadyDNSResolver::LookupSRV( LookupSRVCallback on_resolve, absl::string_view name) { return impl_->LookupSRV( - [this, on_resolve = std::move(on_resolve)]( + [engine = engine_, on_resolve = std::move(on_resolve)]( absl::StatusOr> records) mutable { - return engine_->Asynchronously( - [on_resolve = std::move(on_resolve), - records = std::move(records)]() mutable { - on_resolve(std::move(records)); - }); + return engine->Asynchronously([on_resolve = std::move(on_resolve), + records = std::move(records)]() mutable { + on_resolve(std::move(records)); + }); }, name); } @@ -143,10 +144,10 @@ void ThreadyEventEngine::ThreadyDNSResolver::LookupSRV( void ThreadyEventEngine::ThreadyDNSResolver::LookupTXT( LookupTXTCallback on_resolve, absl::string_view name) { return impl_->LookupTXT( - [this, on_resolve = std::move(on_resolve)]( + [engine = engine_, on_resolve = std::move(on_resolve)]( absl::StatusOr> record) mutable { - return engine_->Asynchronously([on_resolve = std::move(on_resolve), - record = std::move(record)]() mutable { + return engine->Asynchronously([on_resolve = std::move(on_resolve), + record = std::move(record)]() mutable { on_resolve(std::move(record)); }); }, diff --git a/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h b/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h index 6e4f17002f2..8b87d90a757 100644 --- a/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +++ b/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h @@ -77,8 +77,9 @@ class ThreadyEventEngine final : public EventEngine { private: class ThreadyDNSResolver final : public DNSResolver { public: - explicit ThreadyDNSResolver(std::unique_ptr impl) - : impl_(std::move(impl)) {} + ThreadyDNSResolver(std::unique_ptr impl, + std::shared_ptr engine) + : impl_(std::move(impl)), engine_(std::move(engine)) {} void LookupHostname(LookupHostnameCallback on_resolve, absl::string_view name, absl::string_view default_port) override; @@ -89,7 +90,7 @@ class ThreadyEventEngine final : public EventEngine { private: std::unique_ptr impl_; - ThreadyEventEngine* engine_; + std::shared_ptr engine_; }; void Asynchronously(absl::AnyInvocable fn);