|
|
|
@ -146,6 +146,9 @@ static void fail_pending_writes(grpc_exec_ctx *exec_ctx, |
|
|
|
|
grpc_chttp2_stream_global *stream_global, |
|
|
|
|
grpc_error *error); |
|
|
|
|
|
|
|
|
|
static void set_write_state(grpc_chttp2_transport *t, |
|
|
|
|
grpc_chttp2_write_state state, const char *reason); |
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* CONSTRUCTION/DESTRUCTION/REFCOUNTING |
|
|
|
|
*/ |
|
|
|
@ -236,6 +239,7 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, |
|
|
|
|
memset(t, 0, sizeof(*t)); |
|
|
|
|
|
|
|
|
|
t->base.vtable = &vtable; |
|
|
|
|
t->executor.write_state = GRPC_CHTTP2_WRITES_CORKED; |
|
|
|
|
t->ep = ep; |
|
|
|
|
/* one ref is for destroy */ |
|
|
|
|
gpr_ref_init(&t->refs, 1); |
|
|
|
@ -403,6 +407,9 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
set_write_state(t, GRPC_CHTTP2_WRITING_INACTIVE, "uncork"); |
|
|
|
|
grpc_chttp2_initiate_write(exec_ctx, &t->global, false, "init"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void destroy_transport_locked(grpc_exec_ctx *exec_ctx, void *tp, |
|
|
|
@ -637,6 +644,8 @@ grpc_chttp2_stream_parsing *grpc_chttp2_parsing_accept_stream( |
|
|
|
|
|
|
|
|
|
static const char *write_state_name(grpc_chttp2_write_state state) { |
|
|
|
|
switch (state) { |
|
|
|
|
case GRPC_CHTTP2_WRITES_CORKED: |
|
|
|
|
return "CORKED"; |
|
|
|
|
case GRPC_CHTTP2_WRITING_INACTIVE: |
|
|
|
|
return "INACTIVE"; |
|
|
|
|
case GRPC_CHTTP2_WRITE_SCHEDULED: |
|
|
|
@ -684,6 +693,8 @@ void grpc_chttp2_initiate_write(grpc_exec_ctx *exec_ctx, |
|
|
|
|
bool covered_by_poller, const char *reason) { |
|
|
|
|
grpc_chttp2_transport *t = TRANSPORT_FROM_GLOBAL(transport_global); |
|
|
|
|
switch (t->executor.write_state) { |
|
|
|
|
case GRPC_CHTTP2_WRITES_CORKED: |
|
|
|
|
break; |
|
|
|
|
case GRPC_CHTTP2_WRITING_INACTIVE: |
|
|
|
|
set_write_state(t, GRPC_CHTTP2_WRITE_SCHEDULED, reason); |
|
|
|
|
REF_TRANSPORT(t, "writing"); |
|
|
|
@ -789,6 +800,7 @@ static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx, void *tp, |
|
|
|
|
end_waiting_for_write(exec_ctx, t, GRPC_ERROR_REF(error)); |
|
|
|
|
|
|
|
|
|
switch (t->executor.write_state) { |
|
|
|
|
case GRPC_CHTTP2_WRITES_CORKED: |
|
|
|
|
case GRPC_CHTTP2_WRITING_INACTIVE: |
|
|
|
|
case GRPC_CHTTP2_WRITE_SCHEDULED: |
|
|
|
|
GPR_UNREACHABLE_CODE(break); |
|
|
|
|