Actually, dont start reading until initial metadata send is done

pull/357/head
Craig Tiller 10 years ago
parent e6b92e62f1
commit cffbcb7be8
  1. 12
      src/core/surface/call.c

@ -118,7 +118,6 @@ struct grpc_call {
gpr_uint8 got_status_code;
gpr_uint8 sending;
gpr_uint8 num_completed_requests;
gpr_uint8 got_any_data;
gpr_uint8 need_more_data;
reqinfo requests[GRPC_IOREQ_OP_COUNT];
@ -257,10 +256,14 @@ static void unlock(grpc_call *call) {
send_action sa = SEND_NOTHING;
completed_request completed_requests[GRPC_IOREQ_OP_COUNT];
int num_completed_requests = call->num_completed_requests;
int need_more_data = call->need_more_data;
int need_more_data =
call->need_more_data &&
call->requests[GRPC_IOREQ_SEND_INITIAL_METADATA].state == REQ_DONE;
int i;
call->need_more_data = 0;
if (need_more_data) {
call->need_more_data = 0;
}
if (num_completed_requests != 0) {
memcpy(completed_requests, call->completed_requests,
@ -576,7 +579,7 @@ static grpc_call_error start_ioreq(grpc_call *call, const grpc_ioreq *reqs,
call->buffered_messages);
finish_ioreq_op(call, GRPC_IOREQ_RECV_MESSAGES, GRPC_OP_OK);
} else {
call->need_more_data = call->got_any_data;
call->need_more_data = 1;
}
if (call->stream_closed) {
finish_ioreq_op(call, GRPC_IOREQ_RECV_STATUS, GRPC_OP_OK);
@ -1054,7 +1057,6 @@ void grpc_call_recv_message(grpc_call_element *elem,
grpc_call *call = CALL_FROM_TOP_ELEM(elem);
grpc_byte_buffer_array *dest;
lock(call);
call->got_any_data = 1;
if (call->requests[GRPC_IOREQ_RECV_MESSAGES].master != NULL) {
dest = call->requests[GRPC_IOREQ_RECV_MESSAGES].data.recv_messages;
} else {

Loading…
Cancel
Save