Skip to content
Snippets Groups Projects
Commit 468ee4cd authored by Craig Tiller's avatar Craig Tiller
Browse files

Improve test debugability, fix race condition

parent fdf2a664
No related branches found
No related tags found
No related merge requests found
...@@ -69,6 +69,8 @@ static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, bool success) { ...@@ -69,6 +69,8 @@ static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
GPR_ASSERT(success); GPR_ASSERT(success);
gpr_slice_buffer_move_into(&state.temp_incoming_buffer, gpr_slice_buffer_move_into(&state.temp_incoming_buffer,
&state.incoming_buffer); &state.incoming_buffer);
gpr_log(GPR_DEBUG, "got %d bytes, magic is %d bytes",
state.incoming_buffer.length, strlen(magic_connect_string));
if (state.incoming_buffer.length > strlen(magic_connect_string)) { if (state.incoming_buffer.length > strlen(magic_connect_string)) {
gpr_atm_rel_store(&state.done_atm, 1); gpr_atm_rel_store(&state.done_atm, 1);
grpc_endpoint_shutdown(exec_ctx, state.tcp); grpc_endpoint_shutdown(exec_ctx, state.tcp);
...@@ -117,7 +119,6 @@ static gpr_timespec n_sec_deadline(int seconds) { ...@@ -117,7 +119,6 @@ static gpr_timespec n_sec_deadline(int seconds) {
} }
static void start_rpc(int use_creds, int target_port) { static void start_rpc(int use_creds, int target_port) {
gpr_atm_rel_store(&state.done_atm, 0);
state.cq = grpc_completion_queue_create(NULL); state.cq = grpc_completion_queue_create(NULL);
if (use_creds) { if (use_creds) {
state.creds = grpc_fake_transport_security_credentials_create(); state.creds = grpc_fake_transport_security_credentials_create();
...@@ -166,8 +167,15 @@ typedef struct { ...@@ -166,8 +167,15 @@ typedef struct {
static void actually_poll_server(void *arg) { static void actually_poll_server(void *arg) {
poll_args *pa = arg; poll_args *pa = arg;
gpr_timespec deadline = n_sec_deadline(10); gpr_timespec deadline = n_sec_deadline(10);
while (gpr_atm_acq_load(&state.done_atm) == 0 && while (true) {
gpr_time_cmp(gpr_now(GPR_CLOCK_REALTIME), deadline) < 0) { bool done = gpr_atm_acq_load(&state.done_atm) != 0;
gpr_timespec time_left =
gpr_time_sub(deadline, gpr_now(GPR_CLOCK_REALTIME));
gpr_log(GPR_DEBUG, "done=%d, time_left=%d.%09d", done, time_left.tv_sec,
time_left.tv_nsec);
if (done || gpr_time_cmp(time_left, gpr_time_0(GPR_TIMESPAN)) < 0) {
break;
}
test_tcp_server_poll(pa->server, 1); test_tcp_server_poll(pa->server, 1);
} }
gpr_event_set(pa->signal_when_done, (void *)1); gpr_event_set(pa->signal_when_done, (void *)1);
...@@ -176,6 +184,7 @@ static void actually_poll_server(void *arg) { ...@@ -176,6 +184,7 @@ static void actually_poll_server(void *arg) {
static void poll_server_until_read_done(test_tcp_server *server, static void poll_server_until_read_done(test_tcp_server *server,
gpr_event *signal_when_done) { gpr_event *signal_when_done) {
gpr_atm_rel_store(&state.done_atm, 0);
gpr_thd_id id; gpr_thd_id id;
poll_args *pa = gpr_malloc(sizeof(*pa)); poll_args *pa = gpr_malloc(sizeof(*pa));
pa->server = server; pa->server = server;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment