@@ -35,24 +35,28 @@ class CustomEventHandler : public http_client::EventHandler
3535public:
3636 void OnResponse (http_client::Response & /* response */ ) noexcept override
3737 {
38- got_response_ = true ;
38+ got_response_. store ( true , std::memory_order_release) ;
3939 }
4040 void OnEvent (http_client::SessionState state, nostd::string_view /* reason */ ) noexcept override
4141 {
4242 switch (state)
4343 {
4444 case http_client::SessionState::ConnectFailed:
4545 case http_client::SessionState::SendFailed: {
46- is_called_ = true ;
46+ is_called_. store ( true , std::memory_order_release) ;
4747 break ;
4848 }
4949 default :
5050 break ;
5151 }
5252 }
53+
54+ CustomEventHandler () : is_called_(false ), got_response_(false ) {}
55+
5356 ~CustomEventHandler () override = default ;
54- bool is_called_ = false ;
55- bool got_response_ = false ;
57+
58+ std::atomic<bool > is_called_;
59+ std::atomic<bool > got_response_;
5660};
5761
5862class GetEventHandler : public CustomEventHandler
@@ -61,8 +65,8 @@ class GetEventHandler : public CustomEventHandler
6165 {
6266 ASSERT_EQ (200 , response.GetStatusCode ());
6367 ASSERT_EQ (response.GetBody ().size (), 0 );
64- is_called_ = true ;
65- got_response_ = true ;
68+ is_called_. store ( true , std::memory_order_release) ;
69+ got_response_. store ( true , std::memory_order_release) ;
6670 }
6771};
6872
@@ -73,8 +77,8 @@ class PostEventHandler : public CustomEventHandler
7377 ASSERT_EQ (200 , response.GetStatusCode ());
7478 std::string body (response.GetBody ().begin (), response.GetBody ().end ());
7579 ASSERT_EQ (body, " {'k1':'v1', 'k2':'v2', 'k3':'v3'}" );
76- is_called_ = true ;
77- got_response_ = true ;
80+ is_called_. store ( true , std::memory_order_release) ;
81+ got_response_. store ( true , std::memory_order_release) ;
7882 }
7983};
8084
@@ -89,8 +93,8 @@ class FinishInCallbackHandler : public CustomEventHandler
8993 {
9094 ASSERT_EQ (200 , response.GetStatusCode ());
9195 ASSERT_EQ (response.GetBody ().size (), 0 );
92- is_called_ = true ;
93- got_response_ = true ;
96+ is_called_. store ( true , std::memory_order_release) ;
97+ got_response_. store ( true , std::memory_order_release) ;
9498
9599 if (session_)
96100 {
@@ -251,8 +255,8 @@ TEST_F(BasicCurlHttpTests, SendGetRequest)
251255 session->SendRequest (handler);
252256 ASSERT_TRUE (waitForRequests (30 , 1 ));
253257 session->FinishSession ();
254- ASSERT_TRUE (handler->is_called_ );
255- ASSERT_TRUE (handler->got_response_ );
258+ ASSERT_TRUE (handler->is_called_ . load (std::memory_order_acquire) );
259+ ASSERT_TRUE (handler->got_response_ . load (std::memory_order_acquire) );
256260}
257261
258262TEST_F (BasicCurlHttpTests, SendPostRequest)
@@ -274,8 +278,8 @@ TEST_F(BasicCurlHttpTests, SendPostRequest)
274278 session->SendRequest (handler);
275279 ASSERT_TRUE (waitForRequests (30 , 1 ));
276280 session->FinishSession ();
277- ASSERT_TRUE (handler->is_called_ );
278- ASSERT_TRUE (handler->got_response_ );
281+ ASSERT_TRUE (handler->is_called_ . load (std::memory_order_acquire) );
282+ ASSERT_TRUE (handler->got_response_ . load (std::memory_order_acquire) );
279283
280284 session_manager->CancelAllSessions ();
281285 session_manager->FinishAllSessions ();
@@ -293,8 +297,8 @@ TEST_F(BasicCurlHttpTests, RequestTimeout)
293297 auto handler = std::make_shared<GetEventHandler>();
294298 session->SendRequest (handler);
295299 session->FinishSession ();
296- ASSERT_TRUE (handler->is_called_ );
297- ASSERT_FALSE (handler->got_response_ );
300+ ASSERT_TRUE (handler->is_called_ . load (std::memory_order_acquire) );
301+ ASSERT_FALSE (handler->got_response_ . load (std::memory_order_acquire) );
298302}
299303
300304TEST_F (BasicCurlHttpTests, CurlHttpOperations)
@@ -410,8 +414,8 @@ TEST_F(BasicCurlHttpTests, SendGetRequestAsync)
410414 sessions[i]->FinishSession ();
411415 ASSERT_FALSE (sessions[i]->IsSessionActive ());
412416
413- ASSERT_TRUE (handlers[i]->is_called_ );
414- ASSERT_TRUE (handlers[i]->got_response_ );
417+ ASSERT_TRUE (handlers[i]->is_called_ . load (std::memory_order_acquire) );
418+ ASSERT_TRUE (handlers[i]->got_response_ . load (std::memory_order_acquire) );
415419 }
416420
417421 http_client.WaitBackgroundThreadExit ();
@@ -439,16 +443,17 @@ TEST_F(BasicCurlHttpTests, SendGetRequestAsyncTimeout)
439443 // Lock mtx_requests to prevent response, we will check IsSessionActive() in the end
440444 std::unique_lock<std::mutex> lock_requests (mtx_requests);
441445 sessions[i]->SendRequest (handlers[i]);
442- ASSERT_TRUE (sessions[i]->IsSessionActive () || handlers[i]->is_called_ );
446+ ASSERT_TRUE (sessions[i]->IsSessionActive () ||
447+ handlers[i]->is_called_ .load (std::memory_order_acquire));
443448 }
444449
445450 for (unsigned i = 0 ; i < batch_count; ++i)
446451 {
447452 sessions[i]->FinishSession ();
448453 ASSERT_FALSE (sessions[i]->IsSessionActive ());
449454
450- ASSERT_TRUE (handlers[i]->is_called_ );
451- ASSERT_FALSE (handlers[i]->got_response_ );
455+ ASSERT_TRUE (handlers[i]->is_called_ . load (std::memory_order_acquire) );
456+ ASSERT_FALSE (handlers[i]->got_response_ . load (std::memory_order_acquire) );
452457 }
453458}
454459
@@ -484,8 +489,8 @@ TEST_F(BasicCurlHttpTests, SendPostRequestAsync)
484489 ASSERT_FALSE (session->IsSessionActive ());
485490 }
486491
487- ASSERT_TRUE (handler->is_called_ );
488- ASSERT_TRUE (handler->got_response_ );
492+ ASSERT_TRUE (handler->is_called_ . load (std::memory_order_acquire) );
493+ ASSERT_TRUE (handler->got_response_ . load (std::memory_order_acquire) );
489494
490495 http_client.WaitBackgroundThreadExit ();
491496 }
@@ -523,8 +528,8 @@ TEST_F(BasicCurlHttpTests, FinishInAsyncCallback)
523528 {
524529 ASSERT_FALSE (sessions[i]->IsSessionActive ());
525530
526- ASSERT_TRUE (handlers[i]->is_called_ );
527- ASSERT_TRUE (handlers[i]->got_response_ );
531+ ASSERT_TRUE (handlers[i]->is_called_ . load (std::memory_order_acquire) );
532+ ASSERT_TRUE (handlers[i]->got_response_ . load (std::memory_order_acquire) );
528533 }
529534 }
530535}
0 commit comments