Skip to content

Commit b448f6c

Browse files
committed
update
1 parent a4a08aa commit b448f6c

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

ext/include/opentelemetry/ext/http/client/curl/http_client_curl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ class HttpClient : public opentelemetry::ext::http::client::HttpClient
357357
std::chrono::milliseconds scheduled_delay_milliseconds_;
358358

359359
std::chrono::milliseconds background_thread_wait_for_;
360-
std::atomic<bool> is_shutdown;
360+
std::atomic<bool> is_shutdown_;
361361

362362
nostd::shared_ptr<HttpCurlGlobalInitializer> curl_global_initializer_;
363363
};

ext/src/http/client/curl/http_client_curl.cc

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,12 @@ HttpClient::HttpClient()
192192
background_thread_wait_for_{std::chrono::minutes{1}},
193193
curl_global_initializer_(HttpCurlGlobalInitializer::GetInstance())
194194
{
195-
is_shutdown.store(false);
195+
is_shutdown_.store(false);
196196
}
197197

198198
HttpClient::~HttpClient()
199199
{
200-
is_shutdown.store(true, std::memory_order_release);
200+
is_shutdown_.store(true, std::memory_order_release);
201201
while (true)
202202
{
203203
std::unique_ptr<std::thread> background_thread;
@@ -432,14 +432,16 @@ void HttpClient::MaybeSpawnBackgroundThread()
432432
continue;
433433
}
434434

435-
std::chrono::milliseconds wait_for;
435+
std::chrono::milliseconds wait_for = std::chrono::milliseconds::zero();
436+
;
436437
#if LIBCURL_VERSION_NUM >= 0x074200
437-
// only avaliable with curl_multi_poll
438+
// only avaliable with curl_multi_poll, because curl_multi_wait would cause CPU busy,
439+
// curl_multi_wait+sleep could not wakeup quickly
438440
wait_for = self->background_thread_wait_for_;
439441
#endif
440-
if (self->is_shutdown.load(std::memory_order_acquire))
442+
if (self->is_shutdown_.load(std::memory_order_acquire))
441443
{
442-
wait_for = std::chrono::milliseconds{0};
444+
wait_for = std::chrono::milliseconds::zero();
443445
}
444446

445447
if (now - last_free_job_timepoint < wait_for)
@@ -541,7 +543,7 @@ void HttpClient::SetBackgroundWaitFor(std::chrono::milliseconds ms)
541543

542544
void HttpClient::WaitBackgroundThreadExit()
543545
{
544-
is_shutdown.store(true, std::memory_order_release);
546+
is_shutdown_.store(true, std::memory_order_release);
545547
std::unique_ptr<std::thread> background_thread;
546548
{
547549
std::lock_guard<std::mutex> lock_guard{background_thread_m_};
@@ -552,7 +554,7 @@ void HttpClient::WaitBackgroundThreadExit()
552554
{
553555
background_thread->join();
554556
}
555-
is_shutdown.store(false, std::memory_order_release);
557+
is_shutdown_.store(false, std::memory_order_release);
556558
}
557559

558560
void HttpClient::wakeupBackgroundThread()

ext/test/http/curl_http_test.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -530,8 +530,9 @@ TEST_F(BasicCurlHttpTests, FinishInAsyncCallback)
530530
TEST_F(BasicCurlHttpTests, ElegantQuitQuick)
531531
{
532532
auto http_client = http_client::HttpClientFactory::Create();
533-
std::dynamic_pointer_cast<curl::HttpClient>(http_client)->MaybeSpawnBackgroundThread();
534-
auto beg = std::chrono::system_clock::now();
533+
std::static_pointer_cast<curl::HttpClient>(http_client)->MaybeSpawnBackgroundThread();
534+
auto beg = std::chrono::system_clock::now();
535+
// start background first, then test it could wakeup
535536
auto session = http_client->CreateSession("http://127.0.0.1:19000/get/");
536537
auto request = session->CreateRequest();
537538
request->SetUri("get/");
@@ -540,7 +541,9 @@ TEST_F(BasicCurlHttpTests, ElegantQuitQuick)
540541
http_client->FinishAllSessions();
541542
http_client.reset();
542543
// when use background_thread_wait_for_ should have no side effort on elegant quit
543-
ASSERT_TRUE(std::chrono::system_clock::now() - beg < std::chrono::milliseconds{5});
544+
// because ci machine may slow, so we assert it cost should less than
545+
// scheduled_delay_milliseconds_
546+
ASSERT_TRUE(std::chrono::system_clock::now() - beg < std::chrono::milliseconds{20});
544547
ASSERT_TRUE(handler->is_called_);
545548
ASSERT_TRUE(handler->got_response_);
546549
}

0 commit comments

Comments
 (0)