From bc1af8459e048ff7a1c25ec6614c6a35520158b8 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Sun, 6 Feb 2011 01:15:33 -0800 Subject: [PATCH] RevWalk: Don't reset ObjectReader when stopping Applications like UploadPack reset() and reuse the same RevWalk multiple times in very rapid succession. Releasing the ObjectReader's internal state on each use, only to allocate it again on the next cycle kills performance if the ObjectReader has internal caches, or even if the Inflater gets returned and pulled from the InflaterCache too frequently. Making releasing the ObjectReader the application's responsibility when it is done with the RevWalk, which most already do by wrapping their loop in a try/finally block. Change-Id: I3ad188a719e8d7f6bf27d1a7ca16d465534713f4 Signed-off-by: Shawn O. Pearce --- .../src/org/eclipse/jgit/revwalk/PendingGenerator.java | 3 --- org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java | 1 - 2 files changed, 4 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PendingGenerator.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PendingGenerator.java index d0a1a832f..f1624070d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PendingGenerator.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PendingGenerator.java @@ -129,8 +129,6 @@ RevCommit next() throws MissingObjectException, final RevCommit c = pending.next(); if (c == null) { walker.reader.walkAdviceEnd(); - if (!(walker instanceof ObjectWalk)) - walker.reader.release(); return null; } @@ -179,7 +177,6 @@ else if (canDispose) } } catch (StopWalkException swe) { walker.reader.walkAdviceEnd(); - walker.reader.release(); pending.clear(); return null; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java index 17cdb443c..cdedacb73 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java @@ -1181,7 +1181,6 @@ protected void reset(int retainFlags) { } } - reader.release(); roots.clear(); queue = new DateRevQueue(); pending = new StartGenerator(this);