| 
					
				 | 
			
			
				@@ -514,32 +514,32 @@ static void finish_ioreq_op(grpc_call *call, grpc_ioreq_op op, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void finish_send_op(grpc_call *call, grpc_ioreq_op op, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void finish_send_op(grpc_call *call, grpc_ioreq_op op, write_state ws, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            grpc_op_error error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   lock(call); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   finish_ioreq_op(call, op, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   call->sending = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  call->write_state = ws; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   unlock(call); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_call_internal_unref(call, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void finish_write_step(void *pc, grpc_op_error error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  finish_send_op(pc, GRPC_IOREQ_SEND_MESSAGE, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  finish_send_op(pc, GRPC_IOREQ_SEND_MESSAGE, WRITE_STATE_STARTED, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void finish_finish_step(void *pc, grpc_op_error error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  finish_send_op(pc, GRPC_IOREQ_SEND_CLOSE, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  finish_send_op(pc, GRPC_IOREQ_SEND_CLOSE, WRITE_STATE_WRITE_CLOSED, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void finish_start_step(void *pc, grpc_op_error error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  finish_send_op(pc, GRPC_IOREQ_SEND_INITIAL_METADATA, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  finish_send_op(pc, GRPC_IOREQ_SEND_INITIAL_METADATA, WRITE_STATE_STARTED, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static send_action choose_send_action(grpc_call *call) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   switch (call->write_state) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     case WRITE_STATE_INITIAL: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (is_op_live(call, GRPC_IOREQ_SEND_INITIAL_METADATA)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        call->write_state = WRITE_STATE_STARTED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (is_op_live(call, GRPC_IOREQ_SEND_MESSAGE) || is_op_live(call, GRPC_IOREQ_SEND_CLOSE)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           return SEND_BUFFERED_INITIAL_METADATA; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -555,7 +555,6 @@ static send_action choose_send_action(grpc_call *call) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           return SEND_MESSAGE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else if (is_op_live(call, GRPC_IOREQ_SEND_CLOSE)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        call->write_state = WRITE_STATE_WRITE_CLOSED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         finish_ioreq_op(call, GRPC_IOREQ_SEND_TRAILING_METADATA, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         finish_ioreq_op(call, GRPC_IOREQ_SEND_STATUS, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (call->is_client) { 
			 |