|  | @@ -293,14 +293,39 @@ typedef struct grpc_op {
 | 
	
		
			
				|  |  |        const char *status_details;
 | 
	
		
			
				|  |  |      } send_status_from_server;
 | 
	
		
			
				|  |  |      /* ownership of the array is with the caller, but ownership of the elements
 | 
	
		
			
				|  |  | -       stays with the call object */
 | 
	
		
			
				|  |  | +       stays with the call object (ie key, value members are owned by the call
 | 
	
		
			
				|  |  | +       object, recv_initial_metadata->array is owned by the caller).
 | 
	
		
			
				|  |  | +       After the operation completes, call grpc_metadata_array_destroy on this
 | 
	
		
			
				|  |  | +       value, or reuse it in a future op. */
 | 
	
		
			
				|  |  |      grpc_metadata_array *recv_initial_metadata;
 | 
	
		
			
				|  |  |      grpc_byte_buffer **recv_message;
 | 
	
		
			
				|  |  |      struct {
 | 
	
		
			
				|  |  |        /* ownership of the array is with the caller, but ownership of the elements
 | 
	
		
			
				|  |  | -         stays with the call object */
 | 
	
		
			
				|  |  | +         stays with the call object (ie key, value members are owned by the call
 | 
	
		
			
				|  |  | +         object, trailing_metadata->array is owned by the caller).
 | 
	
		
			
				|  |  | +         After the operation completes, call grpc_metadata_array_destroy on this
 | 
	
		
			
				|  |  | +         value, or reuse it in a future op. */
 | 
	
		
			
				|  |  |        grpc_metadata_array *trailing_metadata;
 | 
	
		
			
				|  |  |        grpc_status_code *status;
 | 
	
		
			
				|  |  | +      /* status_details is a buffer owned by the application before the op completes
 | 
	
		
			
				|  |  | +         and after the op has completed. During the operation status_details may be
 | 
	
		
			
				|  |  | +         reallocated to a size larger than *status_details_capacity, in which case
 | 
	
		
			
				|  |  | +         *status_details_capacity will be updated with the new array capacity.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +         Pre-allocating space:
 | 
	
		
			
				|  |  | +         size_t my_capacity = 8;
 | 
	
		
			
				|  |  | +         char *my_details = gpr_malloc(my_capacity);
 | 
	
		
			
				|  |  | +         x.status_details = &my_details;
 | 
	
		
			
				|  |  | +         x.status_details_capacity = &my_capacity; 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +         Not pre-allocating space:
 | 
	
		
			
				|  |  | +         size_t my_capacity = 0;
 | 
	
		
			
				|  |  | +         char *my_details = NULL;
 | 
	
		
			
				|  |  | +         x.status_details = &my_details;
 | 
	
		
			
				|  |  | +         x.status_details_capacity = &my_capacity; 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +         After the call:
 | 
	
		
			
				|  |  | +         gpr_free(my_details); */
 | 
	
		
			
				|  |  |        char **status_details;
 | 
	
		
			
				|  |  |        size_t *status_details_capacity;
 | 
	
		
			
				|  |  |      } recv_status_on_client;
 |