don't hold unnecessary ref

pull/37510/head
Mark D. Roth 6 months ago
parent 6e13580c66
commit 9dcdcbecbe
  1. 10
      src/core/lib/security/credentials/external/external_account_credentials.cc
  2. 5
      src/core/lib/security/credentials/external/external_account_credentials.h

@ -135,13 +135,11 @@ void ExternalAccountCredentials::HttpFetchBody::OnHttpResponse(
// 4. Finish token fetch - Return back the response that contains an access // 4. Finish token fetch - Return back the response that contains an access
// token in FinishTokenFetch(). // token in FinishTokenFetch().
ExternalAccountCredentials::ExternalFetchRequest::ExternalFetchRequest( ExternalAccountCredentials::ExternalFetchRequest::ExternalFetchRequest(
WeakRefCountedPtr<ExternalAccountCredentials> creds, Timestamp deadline, ExternalAccountCredentials* creds, Timestamp deadline,
absl::AnyInvocable<void( absl::AnyInvocable<void(
absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)> absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>
on_done) on_done)
: creds_(std::move(creds)), : creds_(creds), deadline_(deadline), on_done_(std::move(on_done)) {
deadline_(deadline),
on_done_(std::move(on_done)) {
fetch_body_ = creds_->RetrieveSubjectToken( fetch_body_ = creds_->RetrieveSubjectToken(
deadline, deadline,
[self = RefAsSubclass<ExternalFetchRequest>()]( [self = RefAsSubclass<ExternalFetchRequest>()](
@ -631,9 +629,7 @@ ExternalAccountCredentials::FetchToken(
absl::AnyInvocable<void(absl::StatusOr<RefCountedPtr<Token>>)> absl::AnyInvocable<void(absl::StatusOr<RefCountedPtr<Token>>)>
on_done) { on_done) {
return MakeOrphanable<ExternalFetchRequest>( return MakeOrphanable<ExternalFetchRequest>(
// FIXME: does not need to hold a ref, since on_done is holding one this, deadline, std::move(on_done));
WeakRefAsSubclass<ExternalAccountCredentials>(), deadline,
std::move(on_done));
} }
} // namespace grpc_core } // namespace grpc_core

@ -144,8 +144,7 @@ class ExternalAccountCredentials : public TokenFetcherCredentials {
class ExternalFetchRequest : public FetchRequest { class ExternalFetchRequest : public FetchRequest {
public: public:
ExternalFetchRequest( ExternalFetchRequest(
WeakRefCountedPtr<ExternalAccountCredentials> creds, ExternalAccountCredentials* creds, Timestamp deadline,
Timestamp deadline,
absl::AnyInvocable<void( absl::AnyInvocable<void(
absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)> absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>
on_done); on_done);
@ -171,7 +170,7 @@ class ExternalAccountCredentials : public TokenFetcherCredentials {
bool MaybeFailLocked(absl::Status status) bool MaybeFailLocked(absl::Status status)
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&mu_); ABSL_EXCLUSIVE_LOCKS_REQUIRED(&mu_);
WeakRefCountedPtr<ExternalAccountCredentials> creds_; ExternalAccountCredentials* creds_;
Timestamp deadline_; Timestamp deadline_;
absl::AnyInvocable< absl::AnyInvocable<
void(absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)> void(absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>

Loading…
Cancel
Save