@@ -30,19 +30,25 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
3030
3131TracingConnection::TracingConnection (std::shared_ptr<StorageConnection> impl,
3232 AsyncRunner runner)
33- : impl_(std::move(impl)), runner_(std::move(runner)) {
34- if (!runner_) {
35- auto threads =
36- std::make_shared<google::cloud::rest_internal::
37- AutomaticallyCreatedRestPureBackgroundThreads>(1U );
38- runner_ = [threads](std::function<void ()> f) {
39- threads->cq ().RunAsync (std::move (f));
40- };
41- }
42- }
33+ : impl_(std::move(impl)), runner_(std::move(runner)) {}
4334
4435TracingConnection::~TracingConnection () = default ;
4536
37+ TracingConnection::AsyncRunner const & TracingConnection::runner () {
38+ absl::call_once (once_flag_, [this ] {
39+ if (!runner_) {
40+ auto threads =
41+ std::make_shared<google::cloud::rest_internal::
42+ AutomaticallyCreatedRestPureBackgroundThreads>(
43+ 1U );
44+ runner_ = [threads](std::function<void ()> f) {
45+ threads->cq ().RunAsync (std::move (f));
46+ };
47+ }
48+ });
49+ return runner_;
50+ }
51+
4652BucketMetadataCache& TracingConnection::cache () {
4753 static BucketMetadataCache instance (10000 );
4854 return instance;
@@ -65,7 +71,7 @@ void TracingConnection::MaybeTriggerBackgroundFetch(
6571 }
6672
6773 auto current_options = google::cloud::internal::SaveCurrentOptions ();
68- runner_ ([this , bucket_name, current_options]() {
74+ runner () ([this , bucket_name, current_options]() {
6975 google::cloud::internal::OptionsSpan span (current_options);
7076 storage::internal::GetBucketMetadataRequest request (bucket_name);
7177 auto result = impl_->GetBucketMetadata (request);
0 commit comments