From e944524d9d51dfee01f4e5dad5fd3538dd8873b0 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 03 Jul 2013 15:22:12 +0000
Subject: [PATCH] Fix OPENDJ-1049: ReferenceCountedObject can be released twice in some circumstances
---
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/ReferenceCountedObject.java | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/ReferenceCountedObject.java b/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/ReferenceCountedObject.java
index 95457c5..0ddc8d5 100644
--- a/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/ReferenceCountedObject.java
+++ b/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/ReferenceCountedObject.java
@@ -25,6 +25,7 @@
package com.forgerock.opendj.util;
+
/**
* An object which is lazily created when first referenced, and destroyed when
* the last reference is released.
@@ -72,9 +73,12 @@
public void release() {
T instanceToRelease = null;
synchronized (lock) {
- if (value != null && instance == value && --refCount == 0) {
- instanceToRelease = value;
- instance = null;
+ if (value != null) {
+ if (instance == value && --refCount == 0) {
+ // This was the last reference.
+ instanceToRelease = value;
+ instance = null;
+ }
/*
* Force NPE for subsequent get() attempts and prevent
@@ -83,7 +87,6 @@
value = null;
}
}
-
if (instanceToRelease != null) {
destroyInstance(instanceToRelease);
}
--
Gitblit v1.10.0