diff options
author | Craig Tiller <ctiller@google.com> | 2015-07-07 12:44:22 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2015-07-07 12:44:22 -0700 |
commit | 298b0b93ff764b4c94a165ba0bf6e70f2beb4d6d (patch) | |
tree | 43b363a214cebbe976a633c75a14da8c2548fbad /src/core | |
parent | 03b4bb9dfad855e33cedb8c76c5dd79433d6e4eb (diff) |
Avoid finishing writes until data actually sent
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/transport/chttp2/writing.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/core/transport/chttp2/writing.c b/src/core/transport/chttp2/writing.c index fdcc300099..a78654334e 100644 --- a/src/core/transport/chttp2/writing.c +++ b/src/core/transport/chttp2/writing.c @@ -97,12 +97,8 @@ int grpc_chttp2_unlocking_check_writes( grpc_chttp2_list_add_writing_stream(transport_writing, stream_writing); } - /* we should either exhaust window or have no ops left, but not both */ - if (stream_global->outgoing_sopb->nops == 0) { - stream_global->outgoing_sopb = NULL; - grpc_chttp2_schedule_closure(transport_global, - stream_global->send_done_closure, 1); - } else if (stream_global->outgoing_window > 0) { + if (stream_global->outgoing_window > 0 && + stream_global->outgoing_sopb->nops != 0) { grpc_chttp2_list_add_writable_stream(transport_global, stream_global); } } @@ -201,6 +197,11 @@ void grpc_chttp2_cleanup_writing( while (grpc_chttp2_list_pop_written_stream( transport_global, transport_writing, &stream_global, &stream_writing)) { + if (stream_global->outgoing_sopb->nops == 0) { + stream_global->outgoing_sopb = NULL; + grpc_chttp2_schedule_closure(transport_global, + stream_global->send_done_closure, 1); + } if (stream_writing->send_closed != GRPC_DONT_SEND_CLOSED) { stream_global->write_state = GRPC_WRITE_STATE_SENT_CLOSE; if (!transport_global->is_client) { |