Repository: qpid-jms
Updated Branches:
  refs/heads/master 816773722 -> 615fb0848


QPIDJMS-390 Use an atomic int field updater in ProviderFuture

Avoid allocation of AtomicBoolean instances for each ProviderFuture
instance and instead use an Atomic field updater to reduce GC overhead

Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/615fb084
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/615fb084
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/615fb084

Branch: refs/heads/master
Commit: 615fb084877c430c2d040427d78423ac8bab245b
Parents: 8167737
Author: Timothy Bish <[email protected]>
Authored: Fri Jun 8 13:09:43 2018 -0400
Committer: Timothy Bish <[email protected]>
Committed: Fri Jun 8 13:09:43 2018 -0400

----------------------------------------------------------------------
 .../org/apache/qpid/jms/provider/ProviderFuture.java   | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/615fb084/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java
 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java
index 61168d4..01b3c6e 100644
--- 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java
+++ 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java
@@ -19,7 +19,7 @@ package org.apache.qpid.jms.provider;
 import java.io.IOException;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 
 import org.apache.qpid.jms.util.IOExceptionSupport;
 
@@ -28,11 +28,16 @@ import org.apache.qpid.jms.util.IOExceptionSupport;
  */
 public class ProviderFuture implements AsyncResult {
 
-    private final AtomicBoolean completer = new AtomicBoolean();
+    private static final AtomicIntegerFieldUpdater<ProviderFuture> 
COMPLETE_UPDATER =
+            AtomicIntegerFieldUpdater.newUpdater(ProviderFuture.class, 
"complete");
+
     private final CountDownLatch latch = new CountDownLatch(1);
     private final ProviderSynchronization synchronization;
     private volatile Throwable error;
 
+    @SuppressWarnings("unused")
+    private volatile int complete;
+
     public ProviderFuture() {
         this(null);
     }
@@ -48,7 +53,7 @@ public class ProviderFuture implements AsyncResult {
 
     @Override
     public void onFailure(Throwable result) {
-        if (completer.compareAndSet(false, true)) {
+        if (COMPLETE_UPDATER.compareAndSet(this, 0, 1)) {
             error = result;
             if (synchronization != null) {
                 synchronization.onPendingFailure(error);
@@ -59,7 +64,7 @@ public class ProviderFuture implements AsyncResult {
 
     @Override
     public void onSuccess() {
-        if (completer.compareAndSet(false, true)) {
+        if (COMPLETE_UPDATER.compareAndSet(this, 0, 1)) {
             if (synchronization != null) {
                 synchronization.onPendingSuccess();
             }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to