|
|
|
@ -642,6 +642,8 @@ static void finish_global_actions(grpc_exec_ctx *exec_ctx, |
|
|
|
|
grpc_chttp2_executor_action_header *hdr; |
|
|
|
|
grpc_chttp2_executor_action_header *next; |
|
|
|
|
|
|
|
|
|
GPR_TIMER_BEGIN("finish_global_actions", 0); |
|
|
|
|
|
|
|
|
|
for (;;) { |
|
|
|
|
if (!t->executor.writing_active && !t->closed && |
|
|
|
|
grpc_chttp2_unlocking_check_writes(exec_ctx, &t->global, &t->writing)) { |
|
|
|
@ -659,7 +661,9 @@ static void finish_global_actions(grpc_exec_ctx *exec_ctx, |
|
|
|
|
NULL; |
|
|
|
|
gpr_mu_unlock(&t->executor.mu); |
|
|
|
|
while (hdr != NULL) { |
|
|
|
|
GPR_TIMER_BEGIN("chttp2:locked_action", 0); |
|
|
|
|
hdr->action(exec_ctx, t, hdr->stream, hdr->arg); |
|
|
|
|
GPR_TIMER_END("chttp2:locked_action", 0); |
|
|
|
|
next = hdr->next; |
|
|
|
|
gpr_free(hdr); |
|
|
|
|
UNREF_TRANSPORT(exec_ctx, t, "pending_action"); |
|
|
|
@ -672,6 +676,8 @@ static void finish_global_actions(grpc_exec_ctx *exec_ctx, |
|
|
|
|
gpr_mu_unlock(&t->executor.mu); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
GPR_TIMER_END("finish_global_actions", 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void grpc_chttp2_run_with_global_lock(grpc_exec_ctx *exec_ctx, |
|
|
|
@ -681,6 +687,8 @@ void grpc_chttp2_run_with_global_lock(grpc_exec_ctx *exec_ctx, |
|
|
|
|
void *arg, size_t sizeof_arg) { |
|
|
|
|
grpc_chttp2_executor_action_header *hdr; |
|
|
|
|
|
|
|
|
|
GPR_TIMER_BEGIN("grpc_chttp2_run_with_global_lock", 0); |
|
|
|
|
|
|
|
|
|
REF_TRANSPORT(t, "run_global"); |
|
|
|
|
gpr_mu_lock(&t->executor.mu); |
|
|
|
|
|
|
|
|
@ -689,7 +697,9 @@ void grpc_chttp2_run_with_global_lock(grpc_exec_ctx *exec_ctx, |
|
|
|
|
t->executor.global_active = 1; |
|
|
|
|
gpr_mu_unlock(&t->executor.mu); |
|
|
|
|
|
|
|
|
|
GPR_TIMER_BEGIN("chttp2:locked_action", 0); |
|
|
|
|
action(exec_ctx, t, optional_stream, arg); |
|
|
|
|
GPR_TIMER_END("chttp2:locked_action", 0); |
|
|
|
|
|
|
|
|
|
finish_global_actions(exec_ctx, t); |
|
|
|
|
} else { |
|
|
|
@ -726,6 +736,8 @@ void grpc_chttp2_run_with_global_lock(grpc_exec_ctx *exec_ctx, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
UNREF_TRANSPORT(exec_ctx, t, "run_global"); |
|
|
|
|
|
|
|
|
|
GPR_TIMER_END("grpc_chttp2_run_with_global_lock", 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|