| 
					
				 | 
			
			
				@@ -80,6 +80,7 @@ typedef struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } grpc_tcp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_slice_unref(tcp->read_slice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_resource_user_unref(exec_ctx, tcp->resource_user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(tcp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -125,13 +126,17 @@ static void uv_close_callback(uv_handle_t *handle) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_exec_ctx_finish(&exec_ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_slice alloc_read_slice(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   grpc_resource_user *resource_user) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return grpc_resource_user_slice_malloc(exec_ctx, resource_user, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                         GRPC_TCP_DEFAULT_READ_SLICE_SIZE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                          uv_buf_t *buf) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_tcp *tcp = handle->data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (void)suggested_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  tcp->read_slice = grpc_resource_user_slice_malloc( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      &exec_ctx, tcp->resource_user, GRPC_TCP_DEFAULT_READ_SLICE_SIZE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   buf->base = (char *)GRPC_SLICE_START_PTR(tcp->read_slice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   buf->len = GRPC_SLICE_LENGTH(tcp->read_slice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_exec_ctx_finish(&exec_ctx); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -158,6 +163,7 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Successful read 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     sub = grpc_slice_sub_no_ref(tcp->read_slice, 0, (size_t)nread); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_slice_buffer_add(tcp->read_slices, sub); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tcp->read_slice = alloc_read_slice(&exec_ctx, tcp->resource_user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     error = GRPC_ERROR_NONE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (GRPC_TRACER_ON(grpc_tcp_trace)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       size_t i; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -347,6 +353,7 @@ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                grpc_resource_quota *resource_quota, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                char *peer_string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (GRPC_TRACER_ON(grpc_tcp_trace)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -363,6 +370,7 @@ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   tcp->peer_string = gpr_strdup(peer_string); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   tcp->shutting_down = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tcp->read_slice = alloc_read_slice(&exec_ctx, tcp->resource_user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* Tell network status tracking code about the new endpoint */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_network_status_register_endpoint(&tcp->base); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -370,6 +378,8 @@ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   uv_unref((uv_handle_t *)handle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_exec_ctx_finish(&exec_ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return &tcp->base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |