This is an automated email from the ASF dual-hosted git repository.

chenhang pushed a commit to branch branch-2.8
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 6953b1b7aaa078d8f22d398b2b126fcbceb33fc1
Author: Yunze Xu <[email protected]>
AuthorDate: Fri Oct 15 23:44:39 2021 +0800

    [C++] Delay ClientCredentialFlow::initialize to the first authenticate call 
(#12372)
    
    * Delay ClientCredentialFlow::initialize to the first time authenticate() 
is called
    
    * Make once_flag object a field
    
    (cherry picked from commit d5e3ebba2baacb9db57ec0b9621fd7672e2be95f)
---
 pulsar-client-cpp/lib/auth/AuthOauth2.cc | 5 ++---
 pulsar-client-cpp/lib/auth/AuthOauth2.h  | 2 ++
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/pulsar-client-cpp/lib/auth/AuthOauth2.cc 
b/pulsar-client-cpp/lib/auth/AuthOauth2.cc
index 87a217e..0fc935a 100644
--- a/pulsar-client-cpp/lib/auth/AuthOauth2.cc
+++ b/pulsar-client-cpp/lib/auth/AuthOauth2.cc
@@ -282,6 +282,7 @@ static std::string buildClientCredentialsBody(CURL* curl, 
const ParamMap& params
 }
 
 Oauth2TokenResultPtr ClientCredentialFlow::authenticate() {
+    std::call_once(initializeOnce_, &ClientCredentialFlow::initialize, this);
     Oauth2TokenResultPtr resultPtr = Oauth2TokenResultPtr(new 
Oauth2TokenResult());
     if (tokenEndPoint_.empty()) {
         return resultPtr;
@@ -374,9 +375,7 @@ Oauth2TokenResultPtr ClientCredentialFlow::authenticate() {
 
 // AuthOauth2
 
-AuthOauth2::AuthOauth2(ParamMap& params) : flowPtr_(new 
ClientCredentialFlow(params)) {
-    flowPtr_->initialize();
-}
+AuthOauth2::AuthOauth2(ParamMap& params) : flowPtr_(new 
ClientCredentialFlow(params)) {}
 
 AuthOauth2::~AuthOauth2() {}
 
diff --git a/pulsar-client-cpp/lib/auth/AuthOauth2.h 
b/pulsar-client-cpp/lib/auth/AuthOauth2.h
index b1a5ec6..b3cc952 100644
--- a/pulsar-client-cpp/lib/auth/AuthOauth2.h
+++ b/pulsar-client-cpp/lib/auth/AuthOauth2.h
@@ -20,6 +20,7 @@
 #pragma once
 
 #include <pulsar/Authentication.h>
+#include <mutex>
 #include <string>
 
 namespace pulsar {
@@ -63,6 +64,7 @@ class ClientCredentialFlow : public Oauth2Flow {
     const KeyFile keyFile_;
     const std::string audience_;
     const std::string scope_;
+    std::once_flag initializeOnce_;
 };
 
 class Oauth2CachedToken : public CachedToken {

Reply via email to