Skip to content

Commit 7f7b577

Browse files
committed
Merge branch 'release/3.5.x'
2 parents 0262337 + c2b28b8 commit 7f7b577

File tree

8 files changed

+140
-68
lines changed

8 files changed

+140
-68
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ on:
1111
- 'release/**'
1212

1313
env:
14-
BUILD_JAVA_VERSION: '20'
14+
BUILD_JAVA_VERSION: '21'
1515

1616
jobs:
1717
test:
@@ -21,7 +21,7 @@ jobs:
2121
fail-fast: false
2222
matrix:
2323
os: [ ubuntu-latest, windows-latest ]
24-
java: [ '8', '11', '17', '20' ]
24+
java: [ '8', '11', '17', '21' ]
2525
arch: [ 'x64' ]
2626
include:
2727
- os: windows-latest

pom.xml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,10 @@
4848
<target.jdk>8</target.jdk>
4949

5050
<org.junit.version>5.10.0</org.junit.version>
51+
<!-- Stay on 4.x for Java 8 compatibility. Newer versions are used for Java 11+ builds -->
5152
<mockito.version>4.11.0</mockito.version>
5253
<slf4j.version>1.7.36</slf4j.version>
53-
<lombok.version>1.18.28</lombok.version>
54+
<lombok.version>1.18.30</lombok.version>
5455
<jna.version>5.13.0</jna.version>
5556
<bouncycastle.version>1.76</bouncycastle.version>
5657
<vertx.version>4.4.4</vertx.version>
@@ -166,8 +167,9 @@
166167
<plugin>
167168
<groupId>org.apache.maven.plugins</groupId>
168169
<artifactId>maven-surefire-plugin</artifactId>
169-
<version>3.1.2</version>
170+
<version>3.2.1</version>
170171
<configuration>
172+
<rerunFailingTestsCount>3</rerunFailingTestsCount>
171173
<includes>
172174
<!-- Override default config to include inner test classes -->
173175
<include>**/*Test*</include>
@@ -504,6 +506,16 @@
504506
</plugins>
505507
</build>
506508
</profile>
509+
<profile>
510+
<id>java-11</id>
511+
<activation>
512+
<jdk>[11,)</jdk>
513+
</activation>
514+
515+
<properties>
516+
<mockito.version>5.7.0</mockito.version>
517+
</properties>
518+
</profile>
507519
</profiles>
508520

509521
<distributionManagement>

src/main/java/org/xbill/DNS/NioClient.java

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ public abstract class NioClient {
3535
/** Packet logger, if available. */
3636
private static PacketLogger packetLogger = null;
3737

38-
private static Runnable timeoutTask;
39-
private static Runnable registrationsTask;
40-
private static Runnable closeTask;
38+
private static final Runnable[] TIMEOUT_TASKS = new Runnable[2];
39+
private static final Runnable[] REGISTRATIONS_TASKS = new Runnable[2];
40+
private static final Runnable[] CLOSE_TASKS = new Runnable[2];
4141
private static Thread selectorThread;
4242
private static Thread closeThread;
4343
private static volatile Selector selector;
@@ -85,7 +85,7 @@ private static void close(boolean fromHook) {
8585
}
8686

8787
try {
88-
closeTask.run();
88+
runTasks(CLOSE_TASKS);
8989
} catch (Exception e) {
9090
log.warn("Failed to execute shutdown task, ignoring and continuing close", e);
9191
}
@@ -121,11 +121,11 @@ static void runSelector() {
121121
while (run) {
122122
try {
123123
if (selector.select(timeout) == 0) {
124-
timeoutTask.run();
124+
runTasks(TIMEOUT_TASKS);
125125
}
126126

127127
if (run) {
128-
registrationsTask.run();
128+
runTasks(REGISTRATIONS_TASKS);
129129
processReadyKeys();
130130
}
131131
} catch (IOException e) {
@@ -137,16 +137,35 @@ static void runSelector() {
137137
log.debug("dnsjava NIO selector thread stopped");
138138
}
139139

140-
static void setTimeoutTask(Runnable r) {
141-
timeoutTask = r;
140+
static synchronized void setTimeoutTask(Runnable r, boolean isTcpClient) {
141+
addTask(TIMEOUT_TASKS, r, isTcpClient);
142142
}
143143

144-
static void setRegistrationsTask(Runnable r) {
145-
registrationsTask = r;
144+
static synchronized void setRegistrationsTask(Runnable r, boolean isTcpClient) {
145+
addTask(REGISTRATIONS_TASKS, r, isTcpClient);
146146
}
147147

148-
static void setCloseTask(Runnable r) {
149-
closeTask = r;
148+
static synchronized void setCloseTask(Runnable r, boolean isTcpClient) {
149+
addTask(CLOSE_TASKS, r, isTcpClient);
150+
}
151+
152+
private static void addTask(Runnable[] closeTasks, Runnable r, boolean isTcpClient) {
153+
if (isTcpClient) {
154+
closeTasks[0] = r;
155+
} else {
156+
closeTasks[1] = r;
157+
}
158+
}
159+
160+
private static synchronized void runTasks(Runnable[] runnables) {
161+
Runnable r0 = runnables[0];
162+
if (r0 != null) {
163+
r0.run();
164+
}
165+
Runnable r1 = runnables[1];
166+
if (r1 != null) {
167+
r1.run();
168+
}
150169
}
151170

152171
private static void processReadyKeys() {

src/main/java/org/xbill/DNS/NioTcpClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ final class NioTcpClient extends NioClient {
2828
private static final Map<ChannelKey, ChannelState> channelMap = new ConcurrentHashMap<>();
2929

3030
static {
31-
setRegistrationsTask(NioTcpClient::processPendingRegistrations);
32-
setTimeoutTask(NioTcpClient::checkTransactionTimeouts);
33-
setCloseTask(NioTcpClient::closeTcp);
31+
setRegistrationsTask(NioTcpClient::processPendingRegistrations, true);
32+
setTimeoutTask(NioTcpClient::checkTransactionTimeouts, true);
33+
setCloseTask(NioTcpClient::closeTcp, true);
3434
}
3535

3636
private static void processPendingRegistrations() {

src/main/java/org/xbill/DNS/NioUdpClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ final class NioUdpClient extends NioClient {
5050
} else {
5151
prng = new SecureRandom();
5252
}
53-
setRegistrationsTask(NioUdpClient::processPendingRegistrations);
54-
setTimeoutTask(NioUdpClient::checkTransactionTimeouts);
55-
setCloseTask(NioUdpClient::closeUdp);
53+
setRegistrationsTask(NioUdpClient::processPendingRegistrations, false);
54+
setTimeoutTask(NioUdpClient::checkTransactionTimeouts, false);
55+
setCloseTask(NioUdpClient::closeUdp, false);
5656
}
5757

5858
private static void processPendingRegistrations() {

src/test/java/org/xbill/DNS/DNSInputBase.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,19 @@
4747
import org.junit.jupiter.params.ParameterizedTest;
4848
import org.junit.jupiter.params.provider.ValueSource;
4949

50-
abstract class DNSInputBase {
50+
abstract class DNSInputTest {
5151
protected byte[] m_raw;
5252
protected DNSInput m_di;
5353

54-
static class DNSInputArrayTest extends DNSInputBase {
54+
static class DNSInputArrayTest extends DNSInputTest {
5555
@BeforeEach
5656
void setUp() {
5757
m_raw = new byte[] {0, 1, 2, 3, 4, 5, (byte) 255, (byte) 255, (byte) 255, (byte) 255};
5858
m_di = new DNSInput(m_raw);
5959
}
6060
}
6161

62-
static class DNSInputByteBufferTest extends DNSInputBase {
62+
static class DNSInputByteBufferTest extends DNSInputTest {
6363
@BeforeEach
6464
void setUp() {
6565
m_raw = new byte[] {0, 1, 2, 3, 4, 5, (byte) 255, (byte) 255, (byte) 255, (byte) 255};
@@ -72,7 +72,7 @@ void setUp() {
7272
}
7373
}
7474

75-
static class DNSInputByteBufferLimitTest extends DNSInputBase {
75+
static class DNSInputByteBufferLimitTest extends DNSInputTest {
7676
@BeforeEach
7777
void setUp() {
7878
m_raw = new byte[] {0, 1, 2, 3, 4, 5, (byte) 255, (byte) 255, (byte) 255, (byte) 255};
@@ -86,7 +86,7 @@ void setUp() {
8686
}
8787
}
8888

89-
static class DNSInputByteBufferLimitOffsetTest extends DNSInputBase {
89+
static class DNSInputByteBufferLimitOffsetTest extends DNSInputTest {
9090
@BeforeEach
9191
void setUp() throws IOException {
9292
m_raw = new byte[] {0, 1, 2, 3, 4, 5, (byte) 255, (byte) 255, (byte) 255, (byte) 255};

0 commit comments

Comments
 (0)