From ae6f8ddb99bda4ed034ec8310aef18403b18e9a2 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 09 Apr 2015 16:57:19 +0000
Subject: [PATCH] IndexOutputBuffer.java: Prevent too many allocations
---
opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java | 34 +++++++++++++++++++++++-----------
1 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java
index 5310350..5eeaf92 100644
--- a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java
+++ b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java
@@ -462,12 +462,12 @@
private int med3(int a, int b, int c)
{
- ImportRecord pa = toRecord(a);
- ImportRecord pb = toRecord(b);
- ImportRecord pc = toRecord(c);
- return pa.compareTo(pb) < 0
- ? (pb.compareTo(pc) < 0 ? b : pa.compareTo(pc) < 0 ? c : a)
- : (pb.compareTo(pc) > 0 ? b : pa.compareTo(pc) > 0 ? c : a);
+ ImportRecord ra = toRecord(a);
+ ImportRecord rb = toRecord(b);
+ ImportRecord rc = toRecord(c);
+ return ra.compareTo(rb) < 0
+ ? (rb.compareTo(rc) < 0 ? b : ra.compareTo(rc) < 0 ? c : a)
+ : (rb.compareTo(rc) > 0 ? b : ra.compareTo(rc) > 0 ? c : a);
}
private void sort(int off, int len)
@@ -499,22 +499,34 @@
int a = off, b = a, c = off + len - 1, d = c;
while(true)
{
- while (b <= c && toRecord(b).compareTo(toRecord(m)) <= 0)
+ ImportRecord rm = toRecord(m);
+ while (b <= c)
{
- if (toRecord(b).equals(toRecord(m)))
+ int cmp = toRecord(b).compareTo(rm);
+ if (cmp > 0)
+ {
+ break;
+ }
+ else if (cmp == 0)
{
swap(a++, b);
}
b++;
}
- while (c >= b && toRecord(c).compareTo(toRecord(m)) >= 0)
- {
- if (toRecord(c).equals(toRecord(m)))
+
+ while (c >= b) {
+ int cmp = toRecord(c).compareTo(rm);
+ if (cmp < 0)
+ {
+ break;
+ }
+ else if (cmp == 0)
{
swap(c, d--);
}
c--;
}
+
if (b > c)
{
break;
--
Gitblit v1.10.0