|  | @@ -338,7 +338,6 @@ static void uv_socket_connect(grpc_custom_socket* socket,
 | 
	
		
			
				|  |  |  static grpc_resolved_addresses* handle_addrinfo_result(
 | 
	
		
			
				|  |  |      struct addrinfo* result) {
 | 
	
		
			
				|  |  |    struct addrinfo* resp;
 | 
	
		
			
				|  |  | -  struct addrinfo* prev;
 | 
	
		
			
				|  |  |    size_t i;
 | 
	
		
			
				|  |  |    grpc_resolved_addresses* addresses =
 | 
	
		
			
				|  |  |        (grpc_resolved_addresses*)gpr_malloc(sizeof(grpc_resolved_addresses));
 | 
	
	
		
			
				|  | @@ -348,16 +347,13 @@ static grpc_resolved_addresses* handle_addrinfo_result(
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    addresses->addrs = (grpc_resolved_address*)gpr_malloc(
 | 
	
		
			
				|  |  |        sizeof(grpc_resolved_address) * addresses->naddrs);
 | 
	
		
			
				|  |  | -  i = 0;
 | 
	
		
			
				|  |  | -  resp = result;
 | 
	
		
			
				|  |  | -  while (resp != nullptr) {
 | 
	
		
			
				|  |  | +  for (resp = result, i = 0; resp != nullptr; resp = resp->ai_next, i++) {
 | 
	
		
			
				|  |  |      memcpy(&addresses->addrs[i].addr, resp->ai_addr, resp->ai_addrlen);
 | 
	
		
			
				|  |  |      addresses->addrs[i].len = resp->ai_addrlen;
 | 
	
		
			
				|  |  | -    i++;
 | 
	
		
			
				|  |  | -    prev = resp;
 | 
	
		
			
				|  |  | -    resp = resp->ai_next;
 | 
	
		
			
				|  |  | -    gpr_free(prev);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +  // addrinfo objects are allocated by libuv (e.g. in uv_getaddrinfo)
 | 
	
		
			
				|  |  | +  // and not by gpr_malloc
 | 
	
		
			
				|  |  | +  uv_freeaddrinfo(result);
 | 
	
		
			
				|  |  |    return addresses;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |