From 7d1bbf9b372e41121198be2b9f0f322d58b8d014 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 18 Sep 2013 16:28:59 +0000
Subject: [PATCH] Backport fix for OPENDJ-1058 – HeartbeatConnectionFactory does not actively shutdown dead connections

---
 opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/FutureResultTransformer.java |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/FutureResultTransformer.java b/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/FutureResultTransformer.java
index c68229d..83914d4 100644
--- a/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/FutureResultTransformer.java
+++ b/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/FutureResultTransformer.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions copyright 2013 ForgeRock AS.
  */
 
 package com.forgerock.opendj.util;
@@ -44,15 +45,12 @@
  *            The type of the outer result.
  */
 public abstract class FutureResultTransformer<M, N> implements FutureResult<N>, ResultHandler<M> {
-
     private final ResultHandler<? super N> handler;
-
     private volatile FutureResult<? extends M> future = null;
 
     // These do not need to be volatile since the future acts as a memory
     // barrier.
     private N transformedResult = null;
-
     private ErrorResultException transformedErrorResult = null;
 
     /**
@@ -77,8 +75,11 @@
      * {@inheritDoc}
      */
     public final N get() throws ErrorResultException, InterruptedException {
-        future.get();
-
+        try {
+            future.get();
+        } catch (ErrorResultException ignored) {
+            // Ignore untransformed error.
+        }
         // The handlers are guaranteed to have been invoked at this point.
         return get0();
     }
@@ -88,8 +89,11 @@
      */
     public final N get(final long timeout, final TimeUnit unit) throws ErrorResultException,
             TimeoutException, InterruptedException {
-        future.get(timeout, unit);
-
+        try {
+            future.get(timeout, unit);
+        } catch (ErrorResultException ignored) {
+            // Ignore untransformed error.
+        }
         // The handlers are guaranteed to have been invoked at this point.
         return get0();
     }

--
Gitblit v1.10.0