aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/surface
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2015-04-24 11:44:53 -0700
committerGravatar Craig Tiller <ctiller@google.com>2015-04-24 11:44:53 -0700
commitc1f7560ac27b6db4106115e5308f1a9124378a60 (patch)
treee35947864ae18806e9e190fffdd1aa3a31e5a4e0 /src/core/surface
parenta940752deefd463fd07eb529af715813d7fdcd8d (diff)
Stream mapping fixes
Diffstat (limited to 'src/core/surface')
-rw-r--r--src/core/surface/call.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/core/surface/call.c b/src/core/surface/call.c
index dbf78f2cfe..2f514465fc 100644
--- a/src/core/surface/call.c
+++ b/src/core/surface/call.c
@@ -687,7 +687,7 @@ static int add_slice_to_message(grpc_call *call, gpr_slice slice) {
static void call_on_done_recv(void *pc, int success) {
grpc_call *call = pc;
size_t i;
- int unref = 0;
+ int unref_due_to_connection_close = 0;
lock(call);
call->receiving = 0;
if (success) {
@@ -714,7 +714,7 @@ static void call_on_done_recv(void *pc, int success) {
if (call->recv_state == GRPC_STREAM_CLOSED) {
GPR_ASSERT(call->read_state <= READ_STATE_STREAM_CLOSED);
call->read_state = READ_STATE_STREAM_CLOSED;
- unref = 1;
+ unref_due_to_connection_close = 1;
}
finish_read_ops(call);
} else {
@@ -725,9 +725,11 @@ static void call_on_done_recv(void *pc, int success) {
finish_ioreq_op(call, GRPC_IOREQ_RECV_INITIAL_METADATA, GRPC_OP_ERROR);
finish_ioreq_op(call, GRPC_IOREQ_RECV_STATUS_DETAILS, GRPC_OP_ERROR);
}
+ call->recv_ops.nops = 0;
unlock(call);
- if (unref) {
+ grpc_call_internal_unref(call, 0);
+ if (unref_due_to_connection_close) {
grpc_call_internal_unref(call, 0);
}
}
@@ -798,6 +800,7 @@ static int fill_send_ops(grpc_call *call, grpc_transport_op *op) {
op->bind_pollset = grpc_cq_pollset(call->cq);
call->last_send_contains |= 1 << GRPC_IOREQ_SEND_INITIAL_METADATA;
call->write_state = WRITE_STATE_STARTED;
+ call->send_initial_metadata_count = 0;
/* fall through intended */
case WRITE_STATE_STARTED:
if (is_op_live(call, GRPC_IOREQ_SEND_MESSAGE)) {