|  | @@ -812,6 +812,24 @@ void op_state_machine_locked(inproc_stream* s, grpc_error* error) {
 | 
	
		
			
				|  |  |            "op_state_machine %p has trailing md but not yet waiting for it", s);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +  if (!s->t->is_client && s->trailing_md_sent &&
 | 
	
		
			
				|  |  | +      (s->recv_trailing_md_op != nullptr)) {
 | 
	
		
			
				|  |  | +    // In this case, we don't care to receive the write-close from the client
 | 
	
		
			
				|  |  | +    // because we have already sent status and the RPC is over as far as we
 | 
	
		
			
				|  |  | +    // are concerned.
 | 
	
		
			
				|  |  | +    INPROC_LOG(GPR_INFO, "op_state_machine %p scheduling trailing-md-ready %p",
 | 
	
		
			
				|  |  | +               s, new_err);
 | 
	
		
			
				|  |  | +    grpc_core::ExecCtx::Run(
 | 
	
		
			
				|  |  | +        DEBUG_LOCATION,
 | 
	
		
			
				|  |  | +        s->recv_trailing_md_op->payload->recv_trailing_metadata
 | 
	
		
			
				|  |  | +            .recv_trailing_metadata_ready,
 | 
	
		
			
				|  |  | +        GRPC_ERROR_REF(new_err));
 | 
	
		
			
				|  |  | +    complete_if_batch_end_locked(
 | 
	
		
			
				|  |  | +        s, new_err, s->recv_trailing_md_op,
 | 
	
		
			
				|  |  | +        "op_state_machine scheduling recv-trailing-md-on-complete");
 | 
	
		
			
				|  |  | +    s->trailing_md_recvd = true;
 | 
	
		
			
				|  |  | +    s->recv_trailing_md_op = nullptr;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |    if (s->trailing_md_recvd && s->recv_message_op) {
 | 
	
		
			
				|  |  |      // No further message will come on this stream, so finish off the
 | 
	
		
			
				|  |  |      // recv_message_op
 |