aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar David Garcia Quintas <dgq@google.com>2017-12-19 08:48:59 -0800
committerGravatar David Garcia Quintas <dgq@google.com>2017-12-19 08:48:59 -0800
commit1bedfa3963c59756fc513f2ed38171d789bafa57 (patch)
treed21bff6b3c057cacfcb7b86992236e4c25cc7b27 /test
parent4f4a45e97ec7b41bf6caa1feb8511c5b13815c45 (diff)
Fix another data race in client_lb_end2end
Diffstat (limited to 'test')
-rw-r--r--test/cpp/end2end/client_lb_end2end_test.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/test/cpp/end2end/client_lb_end2end_test.cc b/test/cpp/end2end/client_lb_end2end_test.cc
index 7bb88ddca1..c6e9577f0c 100644
--- a/test/cpp/end2end/client_lb_end2end_test.cc
+++ b/test/cpp/end2end/client_lb_end2end_test.cc
@@ -28,6 +28,7 @@
#include <grpc++/server_builder.h>
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
+#include <grpc/support/atm.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include <grpc/support/thd.h>
@@ -61,19 +62,19 @@ namespace grpc {
namespace testing {
namespace {
-int g_connection_delay_ms;
+gpr_atm g_connection_delay_ms;
void tcp_client_connect_with_delay(grpc_closure* closure, grpc_endpoint** ep,
grpc_pollset_set* interested_parties,
const grpc_channel_args* channel_args,
const grpc_resolved_address* addr,
grpc_millis deadline) {
- if (g_connection_delay_ms > 0) {
- gpr_sleep_until(
- grpc_timeout_milliseconds_to_deadline(g_connection_delay_ms));
+ const int delay_ms = gpr_atm_acq_load(&g_connection_delay_ms);
+ if (delay_ms > 0) {
+ gpr_sleep_until(grpc_timeout_milliseconds_to_deadline(delay_ms));
}
original_tcp_connect_fn(closure, ep, interested_parties, channel_args, addr,
- deadline);
+ deadline + delay_ms);
}
// Subclass of TestServiceImpl that increments a request counter for
@@ -352,7 +353,7 @@ TEST_F(ClientLbEnd2endTest, PickFirstBackOffMinReconnect) {
SetNextResolution(ports);
// Make connection delay a 10% longer than it's willing to in order to make
// sure we are hitting the codepath that waits for the min reconnect backoff.
- g_connection_delay_ms = kMinReconnectBackOffMs * 1.10;
+ gpr_atm_rel_store(&g_connection_delay_ms, kMinReconnectBackOffMs * 1.10);
grpc_tcp_client_connect_impl = tcp_client_connect_with_delay;
const gpr_timespec t0 = gpr_now(GPR_CLOCK_MONOTONIC);
channel_->WaitForConnected(
@@ -363,7 +364,7 @@ TEST_F(ClientLbEnd2endTest, PickFirstBackOffMinReconnect) {
// We should have waited at least kMinReconnectBackOffMs. We substract one to
// account for test and precision accuracy drift.
EXPECT_GE(waited_ms, kMinReconnectBackOffMs - 1);
- g_connection_delay_ms = 0;
+ gpr_atm_rel_store(&g_connection_delay_ms, 0);
}
TEST_F(ClientLbEnd2endTest, PickFirstUpdates) {