Skip to content

Commit 475691d

Browse files
committed
Cancel task now has “last second” bail out check
1 parent b01be97 commit 475691d

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

driver/src/main/java/com/impossibl/postgres/jdbc/CancelRequestTask.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import java.io.ByteArrayOutputStream;
4141
import java.io.DataOutputStream;
4242
import java.io.IOException;
43+
import java.io.OutputStream;
4344
import java.net.InetSocketAddress;
4445
import java.net.Socket;
4546
import java.net.SocketAddress;
@@ -67,6 +68,10 @@ public void go() {
6768

6869
private void sendCancelRequest() {
6970

71+
if (isCancelled()) {
72+
return;
73+
}
74+
7075
if (keyData.getProcessId() == 0 && keyData.getSecretKey() == 0) {
7176
logger.warning("Cannot send CancelRequest because of missing BackendKeyData.");
7277
return;
@@ -79,7 +84,21 @@ private void sendCancelRequest() {
7984
InetSocketAddress target = (InetSocketAddress) serverAddress;
8085

8186
try (Socket abortSocket = new Socket(target.getAddress(), target.getPort())) {
82-
writeCancelRequest(new DataOutputStream(abortSocket.getOutputStream()));
87+
OutputStream abortSocketStream = abortSocket.getOutputStream();
88+
89+
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
90+
91+
writeCancelRequest(new DataOutputStream(os));
92+
93+
byte[] request = os.toByteArray();
94+
95+
// last second bail out
96+
if (isCancelled()) {
97+
return;
98+
}
99+
100+
abortSocketStream.write(request);
101+
}
83102
}
84103

85104
}
@@ -98,6 +117,11 @@ else if (serverAddress instanceof DomainSocketAddress) {
98117
buffer.put(request, 0, request.length);
99118
buffer.flip();
100119

120+
// last second bail out
121+
if (isCancelled()) {
122+
return;
123+
}
124+
101125
unixSocket.write(buffer, 0, buffer.limit());
102126
}
103127

driver/src/main/java/com/impossibl/postgres/jdbc/ExecutionTimerTask.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ enum State {
5353

5454
protected abstract void go();
5555

56+
boolean isCancelled() {
57+
return state.get() != State.Running || thread.isInterrupted();
58+
}
59+
5660
@Override
5761
public void run() {
5862

0 commit comments

Comments
 (0)