Skip to content

Commit 2b2d20b

Browse files
authored
Fixed race condition with addressList (#1855)
1 parent c9fa435 commit 2b2d20b

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/main/java/com/microsoft/sqlserver/jdbc/IOBuffer.java

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2705,13 +2705,15 @@ private SocketFactory getSocketFactory() throws IOException {
27052705
*/
27062706
private InetSocketAddress getInetAddressByIPPreference(String hostName,
27072707
int portNumber) throws IOException, SQLServerException {
2708-
InetSocketAddress addr = InetSocketAddress.createUnresolved(hostName, portNumber);
2709-
for (int i = 0; i < addressList.size(); i++) {
2710-
addr = new InetSocketAddress(addressList.get(i), portNumber);
2711-
if (!addr.isUnresolved())
2712-
return addr;
2708+
synchronized (addressList) {
2709+
InetSocketAddress addr = InetSocketAddress.createUnresolved(hostName, portNumber);
2710+
for (int i = 0; i < addressList.size(); i++) {
2711+
addr = new InetSocketAddress(addressList.get(i), portNumber);
2712+
if (!addr.isUnresolved())
2713+
return addr;
2714+
}
2715+
return addr;
27132716
}
2714-
return addr;
27152717
}
27162718

27172719
/**
@@ -2794,17 +2796,19 @@ private Socket getSocketByIPPreference(String hostName, int portNumber, int time
27942796
* Boolean switch for IPv6 first
27952797
*/
27962798
private void fillAddressList(InetAddress[] addresses, boolean ipv6first) {
2797-
addressList.clear();
2798-
if (ipv6first) {
2799-
for (InetAddress addr : addresses) {
2800-
if (addr instanceof Inet6Address) {
2801-
addressList.add(addr);
2799+
synchronized (addressList) {
2800+
addressList.clear();
2801+
if (ipv6first) {
2802+
for (InetAddress addr : addresses) {
2803+
if (addr instanceof Inet6Address) {
2804+
addressList.add(addr);
2805+
}
28022806
}
2803-
}
2804-
} else {
2805-
for (InetAddress addr : addresses) {
2806-
if (addr instanceof Inet4Address) {
2807-
addressList.add(addr);
2807+
} else {
2808+
for (InetAddress addr : addresses) {
2809+
if (addr instanceof Inet4Address) {
2810+
addressList.add(addr);
2811+
}
28082812
}
28092813
}
28102814
}

0 commit comments

Comments
 (0)