27
27
import java .security .PrivilegedAction ;
28
28
import java .util .Set ;
29
29
import java .util .concurrent .ConcurrentHashMap ;
30
+ import java .util .concurrent .atomic .AtomicBoolean ;
30
31
import java .util .concurrent .locks .ReentrantReadWriteLock ;
31
32
32
33
public class RequestRegistry implements TimerListener {
@@ -36,9 +37,9 @@ public class RequestRegistry implements TimerListener {
36
37
static boolean wrapPrivileged = false ;
37
38
ConcurrentExpandableList <Request > requestList = new ConcurrentExpandableList <>();
38
39
RequestHandler requestHandler = null ;
39
- boolean valid = true ;
40
- boolean paused = false ;
41
- volatile boolean requestTimeoutEnabled = true ;
40
+ final AtomicBoolean valid = new AtomicBoolean ( true ) ;
41
+ final AtomicBoolean paused = new AtomicBoolean ( false ) ;
42
+ final AtomicBoolean requestTimeoutEnabled = new AtomicBoolean ( true ) ;
42
43
Semaphore retrySem = null ;
43
44
Set <Request > retrySet = ConcurrentHashMap .newKeySet ();
44
45
String debugString = null ;
@@ -56,15 +57,15 @@ public static void setWrapPrivileged(boolean wrapPrivileged) {
56
57
}
57
58
58
59
public void setRequestTimeoutEnabled (boolean requestTimeoutEnabled ) {
59
- this .requestTimeoutEnabled = requestTimeoutEnabled ;
60
+ this .requestTimeoutEnabled . set ( requestTimeoutEnabled ) ;
60
61
if (requestTimeoutEnabled )
61
62
TimerRegistry .Singleton ().addTimerListener (TIMEOUT_CHECKINTERVAL , this );
62
63
}
63
64
64
65
public void setPaused (boolean paused ) {
65
66
lock .writeLock ().lock ();
66
67
try {
67
- this .paused = paused ;
68
+ this .paused . set ( paused ) ;
68
69
} finally {
69
70
lock .writeLock ().unlock ();
70
71
}
@@ -137,24 +138,30 @@ public Reply request(Request req) {
137
138
}
138
139
139
140
private void processRequest (Request req ) {
140
- if (!valid )
141
- throw new RuntimeException ("Invalid request (connection might be closed already)" );
142
-
143
- req .setReply (null );
144
- req .setDoRetry (false );
145
- if (requestTimeoutEnabled )
146
- req .setTimeout (System .currentTimeMillis () + SWIFTMQ_REQUEST_TIMEOUT );
147
-
148
- // find next free index or add request to the end of the list
149
- req .setRequestNumber (requestList .add (req ));
150
-
151
- // perform request via request handler
152
- if (!paused )
153
- requestHandler .performRequest (req );
154
- else {
155
- if (DEBUG ) System .out .println (debugString + ": Paused, request NOT sent: " + req );
141
+ lock .writeLock ().lock ();
142
+ try {
143
+ if (!valid .get ())
144
+ throw new RuntimeException ("Invalid request (connection might be closed already)" );
145
+
146
+ req .setReply (null );
147
+ req .setDoRetry (false );
148
+ if (requestTimeoutEnabled .get ())
149
+ req .setTimeout (System .currentTimeMillis () + SWIFTMQ_REQUEST_TIMEOUT );
150
+
151
+ // find next free index or add request to the end of the list
152
+ req .setRequestNumber (requestList .add (req ));
153
+
154
+ // perform request via request handler
155
+ if (!paused .get ())
156
+ requestHandler .performRequest (req );
157
+ else {
158
+ if (DEBUG ) System .out .println (debugString + ": Paused, request NOT sent: " + req );
159
+ }
160
+ } finally {
161
+ lock .writeLock ().unlock ();
156
162
}
157
163
164
+
158
165
}
159
166
160
167
private Semaphore setReplySynchronized (Reply reply ) {
@@ -214,7 +221,7 @@ public void cancelAllRequests(TransportException exception, boolean valid) {
214
221
retrySem .notifySingleWaiter ();
215
222
retrySem = null ;
216
223
}
217
- this .valid = valid ;
224
+ this .valid . set ( valid ) ;
218
225
} finally {
219
226
lock .writeLock ().unlock ();
220
227
}
@@ -290,7 +297,7 @@ public void performTimeAction(TimerEvent evt) {
290
297
try {
291
298
long actTime = System .currentTimeMillis ();
292
299
for (int i = 0 ; i < requestList .size (); i ++) {
293
- Request req = ( Request ) requestList .get (i );
300
+ Request req = requestList .get (i );
294
301
if (req != null && req .getTimeout () != -1 && req .getTimeout () < actTime ) {
295
302
requestList .remove (i );
296
303
Reply reply = req .createReply ();
@@ -308,11 +315,11 @@ public void performTimeAction(TimerEvent evt) {
308
315
}
309
316
310
317
public void close () {
311
- if (requestTimeoutEnabled )
318
+ if (requestTimeoutEnabled . get () )
312
319
TimerRegistry .Singleton ().removeTimerListener (TIMEOUT_CHECKINTERVAL , this );
313
320
}
314
321
315
- private class PrivilegedRequestHandler implements RequestHandler {
322
+ private static class PrivilegedRequestHandler implements RequestHandler {
316
323
RequestHandler realHandler = null ;
317
324
318
325
public PrivilegedRequestHandler (RequestHandler realHandler ) {
@@ -329,7 +336,7 @@ public Object run() {
329
336
}
330
337
}
331
338
332
- private abstract class PrivilegedRequestAction implements PrivilegedAction {
339
+ private abstract static class PrivilegedRequestAction implements PrivilegedAction {
333
340
Request myRequest = null ;
334
341
335
342
public PrivilegedRequestAction (Request request ) {
0 commit comments