40
40
import java .io .ByteArrayOutputStream ;
41
41
import java .io .DataOutputStream ;
42
42
import java .io .IOException ;
43
+ import java .io .OutputStream ;
43
44
import java .net .InetSocketAddress ;
44
45
import java .net .Socket ;
45
46
import java .net .SocketAddress ;
@@ -67,6 +68,10 @@ public void go() {
67
68
68
69
private void sendCancelRequest () {
69
70
71
+ if (isCancelled ()) {
72
+ return ;
73
+ }
74
+
70
75
if (keyData .getProcessId () == 0 && keyData .getSecretKey () == 0 ) {
71
76
logger .warning ("Cannot send CancelRequest because of missing BackendKeyData." );
72
77
return ;
@@ -79,7 +84,21 @@ private void sendCancelRequest() {
79
84
InetSocketAddress target = (InetSocketAddress ) serverAddress ;
80
85
81
86
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
+ }
83
102
}
84
103
85
104
}
@@ -98,6 +117,11 @@ else if (serverAddress instanceof DomainSocketAddress) {
98
117
buffer .put (request , 0 , request .length );
99
118
buffer .flip ();
100
119
120
+ // last second bail out
121
+ if (isCancelled ()) {
122
+ return ;
123
+ }
124
+
101
125
unixSocket .write (buffer , 0 , buffer .limit ());
102
126
}
103
127
0 commit comments