diff options
author | 2017-12-07 19:38:43 -0800 | |
---|---|---|
committer | 2017-12-07 19:38:43 -0800 | |
commit | d6c292f17779771e665816f8f3a4cf366fc7012e (patch) | |
tree | ae779349708ad4896f8a3b5c074e45e581172cba /src/core/lib | |
parent | 8cf1470a51ea276ca84825e7495d4ee24743540d (diff) | |
parent | c01a91da2d43e858cace8b34119fa35148818458 (diff) |
Merge master
Diffstat (limited to 'src/core/lib')
-rw-r--r-- | src/core/lib/surface/channel_ping.cc | 2 | ||||
-rw-r--r-- | src/core/lib/surface/lame_client.cc | 12 | ||||
-rw-r--r-- | src/core/lib/transport/transport.h | 10 | ||||
-rw-r--r-- | src/core/lib/transport/transport_op_string.cc | 2 |
4 files changed, 19 insertions, 7 deletions
diff --git a/src/core/lib/surface/channel_ping.cc b/src/core/lib/surface/channel_ping.cc index 616ba9e0ac..a030d8d0f0 100644 --- a/src/core/lib/surface/channel_ping.cc +++ b/src/core/lib/surface/channel_ping.cc @@ -56,7 +56,7 @@ void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq, pr->tag = tag; pr->cq = cq; GRPC_CLOSURE_INIT(&pr->closure, ping_done, pr, grpc_schedule_on_exec_ctx); - op->send_ping = &pr->closure; + op->send_ping.on_ack = &pr->closure; op->bind_pollset = grpc_cq_pollset(cq); GPR_ASSERT(grpc_cq_begin_op(cq, tag)); top_elem->filter->start_transport_op(top_elem, op); diff --git a/src/core/lib/surface/lame_client.cc b/src/core/lib/surface/lame_client.cc index 29b4e3f0c7..08611ff730 100644 --- a/src/core/lib/surface/lame_client.cc +++ b/src/core/lib/surface/lame_client.cc @@ -99,9 +99,15 @@ static void lame_start_transport_op(grpc_channel_element* elem, *op->connectivity_state = GRPC_CHANNEL_SHUTDOWN; GRPC_CLOSURE_SCHED(op->on_connectivity_state_change, GRPC_ERROR_NONE); } - if (op->send_ping != nullptr) { - GRPC_CLOSURE_SCHED(op->send_ping, GRPC_ERROR_CREATE_FROM_STATIC_STRING( - "lame client channel")); + if (op->send_ping.on_initiate != nullptr) { + GRPC_CLOSURE_SCHED( + op->send_ping.on_initiate, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel")); + } + if (op->send_ping.on_ack != nullptr) { + GRPC_CLOSURE_SCHED( + op->send_ping.on_ack, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel")); } GRPC_ERROR_UNREF(op->disconnect_with_error); if (op->on_consumed != nullptr) { diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h index b03c0218dc..d813413a2a 100644 --- a/src/core/lib/transport/transport.h +++ b/src/core/lib/transport/transport.h @@ -243,8 +243,14 @@ typedef struct grpc_transport_op { grpc_pollset* bind_pollset; /** add this transport to a pollset_set */ grpc_pollset_set* bind_pollset_set; - /** send a ping, call this back if not NULL */ - grpc_closure* send_ping; + /** send a ping, if either on_initiate or on_ack is not NULL */ + struct { + /** Ping may be delayed by the transport, on_initiate callback will be + called when the ping is actually being sent. */ + grpc_closure* on_initiate; + /** Called when the ping ack is received */ + grpc_closure* on_ack; + } send_ping; /*************************************************************************** * remaining fields are initialized and used at the discretion of the diff --git a/src/core/lib/transport/transport_op_string.cc b/src/core/lib/transport/transport_op_string.cc index e69ab02570..c0f82fea0d 100644 --- a/src/core/lib/transport/transport_op_string.cc +++ b/src/core/lib/transport/transport_op_string.cc @@ -187,7 +187,7 @@ char* grpc_transport_op_string(grpc_transport_op* op) { gpr_strvec_add(&b, gpr_strdup("BIND_POLLSET_SET")); } - if (op->send_ping != nullptr) { + if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) { if (!first) gpr_strvec_add(&b, gpr_strdup(" ")); // first = false; gpr_strvec_add(&b, gpr_strdup("SEND_PING")); |