addressed review feedback.

pull/7713/head
Makarand Dharmapurikar 9 years ago
parent 3578c5e592
commit 1b8deaa407
  1. 34
      src/core/ext/transport/cronet/transport/cronet_transport.c

@ -52,12 +52,12 @@
#define GRPC_HEADER_SIZE_IN_BYTES 5 #define GRPC_HEADER_SIZE_IN_BYTES 5
#define CRONET_LOG(...) \ #define CRONET_LOG(...) \
{ \ do { \
if (grpc_cronet_trace) gpr_log(__VA_ARGS__); \ if (grpc_cronet_trace) gpr_log(__VA_ARGS__); \
} } while (0)
/* TODO (makdharma): Hook up into the wider tracing mechanism */ /* TODO (makdharma): Hook up into the wider tracing mechanism */
int grpc_cronet_trace = 1; int grpc_cronet_trace = 0;
enum OP_RESULT { enum OP_RESULT {
ACTION_TAKEN_WITH_CALLBACK, ACTION_TAKEN_WITH_CALLBACK,
@ -192,8 +192,6 @@ struct stream_obj {
cronet_bidirectional_stream *cbs; cronet_bidirectional_stream *cbs;
cronet_bidirectional_stream_header_array header_array; cronet_bidirectional_stream_header_array header_array;
/* Used for executing callbacks for ops */
grpc_exec_ctx exec_ctx;
/* Stream level state. Some state will be tracked both at stream and stream_op /* Stream level state. Some state will be tracked both at stream and stream_op
* level */ * level */
struct op_state state; struct op_state state;
@ -206,7 +204,8 @@ struct stream_obj {
}; };
typedef struct stream_obj stream_obj; typedef struct stream_obj stream_obj;
static enum OP_RESULT execute_stream_op(struct op_and_state *oas); static enum OP_RESULT execute_stream_op(grpc_exec_ctx *exec_ctx,
struct op_and_state *oas);
/* /*
Add a new stream op to op storage. Add a new stream op to op storage.
@ -267,11 +266,12 @@ static void remove_from_storage(struct stream_obj *s,
or on the application supplied thread via the perform_stream_op function. or on the application supplied thread via the perform_stream_op function.
*/ */
static void execute_from_storage(stream_obj *s) { static void execute_from_storage(stream_obj *s) {
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
gpr_mu_lock(&s->mu); gpr_mu_lock(&s->mu);
for (struct op_and_state *curr = s->storage.head; curr != NULL;) { for (struct op_and_state *curr = s->storage.head; curr != NULL;) {
CRONET_LOG(GPR_DEBUG, "calling op at %p. done = %d", curr, curr->done); CRONET_LOG(GPR_DEBUG, "calling op at %p. done = %d", curr, curr->done);
GPR_ASSERT(curr->done == 0); GPR_ASSERT(curr->done == 0);
enum OP_RESULT result = execute_stream_op(curr); enum OP_RESULT result = execute_stream_op(&exec_ctx, curr);
CRONET_LOG(GPR_DEBUG, "execute_stream_op[%p] returns %s", curr, CRONET_LOG(GPR_DEBUG, "execute_stream_op[%p] returns %s", curr,
op_result_string[result]); op_result_string[result]);
/* if this op is done, then remove it and free memory */ /* if this op is done, then remove it and free memory */
@ -288,7 +288,7 @@ static void execute_from_storage(stream_obj *s) {
} }
} }
gpr_mu_unlock(&s->mu); gpr_mu_unlock(&s->mu);
grpc_exec_ctx_finish(&s->exec_ctx); grpc_exec_ctx_finish(&exec_ctx);
} }
/* /*
@ -683,7 +683,8 @@ static bool op_can_be_run(grpc_transport_stream_op *curr_op,
return result; return result;
} }
static enum OP_RESULT execute_stream_op(struct op_and_state *oas) { static enum OP_RESULT execute_stream_op(grpc_exec_ctx *exec_ctx,
struct op_and_state *oas) {
grpc_transport_stream_op *stream_op = &oas->op; grpc_transport_stream_op *stream_op = &oas->op;
struct stream_obj *s = oas->s; struct stream_obj *s = oas->s;
struct op_state *stream_state = &s->state; struct op_state *stream_state = &s->state;
@ -724,10 +725,10 @@ static enum OP_RESULT execute_stream_op(struct op_and_state *oas) {
if (!stream_state->state_op_done[OP_CANCEL_ERROR]) { if (!stream_state->state_op_done[OP_CANCEL_ERROR]) {
grpc_chttp2_incoming_metadata_buffer_publish( grpc_chttp2_incoming_metadata_buffer_publish(
&oas->s->state.rs.initial_metadata, stream_op->recv_initial_metadata); &oas->s->state.rs.initial_metadata, stream_op->recv_initial_metadata);
grpc_exec_ctx_sched(&s->exec_ctx, stream_op->recv_initial_metadata_ready, grpc_exec_ctx_sched(exec_ctx, stream_op->recv_initial_metadata_ready,
GRPC_ERROR_NONE, NULL); GRPC_ERROR_NONE, NULL);
} else { } else {
grpc_exec_ctx_sched(&s->exec_ctx, stream_op->recv_initial_metadata_ready, grpc_exec_ctx_sched(exec_ctx, stream_op->recv_initial_metadata_ready,
GRPC_ERROR_CANCELLED, NULL); GRPC_ERROR_CANCELLED, NULL);
} }
stream_state->state_op_done[OP_RECV_INITIAL_METADATA] = true; stream_state->state_op_done[OP_RECV_INITIAL_METADATA] = true;
@ -764,13 +765,13 @@ static enum OP_RESULT execute_stream_op(struct op_and_state *oas) {
OP_RECV_MESSAGE)) { OP_RECV_MESSAGE)) {
CRONET_LOG(GPR_DEBUG, "running: %p OP_RECV_MESSAGE", oas); CRONET_LOG(GPR_DEBUG, "running: %p OP_RECV_MESSAGE", oas);
if (stream_state->state_op_done[OP_CANCEL_ERROR]) { if (stream_state->state_op_done[OP_CANCEL_ERROR]) {
grpc_exec_ctx_sched(&s->exec_ctx, stream_op->recv_message_ready, grpc_exec_ctx_sched(exec_ctx, stream_op->recv_message_ready,
GRPC_ERROR_CANCELLED, NULL); GRPC_ERROR_CANCELLED, NULL);
stream_state->state_op_done[OP_RECV_MESSAGE] = true; stream_state->state_op_done[OP_RECV_MESSAGE] = true;
} else if (stream_state->rs.read_stream_closed == true) { } else if (stream_state->rs.read_stream_closed == true) {
/* No more data will be received */ /* No more data will be received */
CRONET_LOG(GPR_DEBUG, "read stream closed"); CRONET_LOG(GPR_DEBUG, "read stream closed");
grpc_exec_ctx_sched(&s->exec_ctx, stream_op->recv_message_ready, grpc_exec_ctx_sched(exec_ctx, stream_op->recv_message_ready,
GRPC_ERROR_NONE, NULL); GRPC_ERROR_NONE, NULL);
stream_state->state_op_done[OP_RECV_MESSAGE] = true; stream_state->state_op_done[OP_RECV_MESSAGE] = true;
oas->state.state_op_done[OP_RECV_MESSAGE] = true; oas->state.state_op_done[OP_RECV_MESSAGE] = true;
@ -803,7 +804,7 @@ static enum OP_RESULT execute_stream_op(struct op_and_state *oas) {
&stream_state->rs.read_slice_buffer, 0); &stream_state->rs.read_slice_buffer, 0);
*((grpc_byte_buffer **)stream_op->recv_message) = *((grpc_byte_buffer **)stream_op->recv_message) =
(grpc_byte_buffer *)&stream_state->rs.sbs; (grpc_byte_buffer *)&stream_state->rs.sbs;
grpc_exec_ctx_sched(&s->exec_ctx, stream_op->recv_message_ready, grpc_exec_ctx_sched(exec_ctx, stream_op->recv_message_ready,
GRPC_ERROR_NONE, NULL); GRPC_ERROR_NONE, NULL);
stream_state->state_op_done[OP_RECV_MESSAGE] = true; stream_state->state_op_done[OP_RECV_MESSAGE] = true;
oas->state.state_op_done[OP_RECV_MESSAGE] = true; oas->state.state_op_done[OP_RECV_MESSAGE] = true;
@ -835,7 +836,7 @@ static enum OP_RESULT execute_stream_op(struct op_and_state *oas) {
&stream_state->rs.read_slice_buffer, 0); &stream_state->rs.read_slice_buffer, 0);
*((grpc_byte_buffer **)stream_op->recv_message) = *((grpc_byte_buffer **)stream_op->recv_message) =
(grpc_byte_buffer *)&stream_state->rs.sbs; (grpc_byte_buffer *)&stream_state->rs.sbs;
grpc_exec_ctx_sched(&s->exec_ctx, stream_op->recv_message_ready, grpc_exec_ctx_sched(exec_ctx, stream_op->recv_message_ready,
GRPC_ERROR_NONE, NULL); GRPC_ERROR_NONE, NULL);
stream_state->state_op_done[OP_RECV_MESSAGE] = true; stream_state->state_op_done[OP_RECV_MESSAGE] = true;
oas->state.state_op_done[OP_RECV_MESSAGE] = true; oas->state.state_op_done[OP_RECV_MESSAGE] = true;
@ -882,7 +883,7 @@ static enum OP_RESULT execute_stream_op(struct op_and_state *oas) {
/* All actions in this stream_op are complete. Call the on_complete callback /* All actions in this stream_op are complete. Call the on_complete callback
*/ */
CRONET_LOG(GPR_DEBUG, "running: %p OP_ON_COMPLETE", oas); CRONET_LOG(GPR_DEBUG, "running: %p OP_ON_COMPLETE", oas);
grpc_exec_ctx_sched(&s->exec_ctx, stream_op->on_complete, GRPC_ERROR_NONE, grpc_exec_ctx_sched(exec_ctx, stream_op->on_complete, GRPC_ERROR_NONE,
NULL); NULL);
oas->state.state_op_done[OP_ON_COMPLETE] = true; oas->state.state_op_done[OP_ON_COMPLETE] = true;
oas->done = true; oas->done = true;
@ -923,7 +924,6 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
memset(s->state.state_callback_received, 0, memset(s->state.state_callback_received, 0,
sizeof(s->state.state_callback_received)); sizeof(s->state.state_callback_received));
gpr_mu_init(&s->mu); gpr_mu_init(&s->mu);
s->exec_ctx = *exec_ctx;
return 0; return 0;
} }

Loading…
Cancel
Save