From d01fe3279530a2939bf917d26e393efb85079ca1 Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Wed, 10 Apr 2013 09:41:55 -0700 Subject: [PATCH] Skip main thread test in ThreadSafeProgressMonitor update(int) is only invoked from a worker thread, in JGit's case this is DeltaTask. The Javadoc of TSPM suggests update should only ever be used by a worker thread. Skip the main thread check, saving some cycles on each run of the progress monitor. Change-Id: I6cb9382d71b4cb3f8e8981c7ac382da25304dfcb --- .../org/eclipse/jgit/lib/ThreadSafeProgressMonitorTest.java | 2 ++ .../src/org/eclipse/jgit/lib/ThreadSafeProgressMonitor.java | 5 +---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ThreadSafeProgressMonitorTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ThreadSafeProgressMonitorTest.java index b44970e35..2845f8acf 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ThreadSafeProgressMonitorTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ThreadSafeProgressMonitorTest.java @@ -104,9 +104,11 @@ public void testMethodsOkOnMainThread() { assertEquals(42, mock.value); pm.update(1); + pm.pollForUpdates(); assertEquals(43, mock.value); pm.update(2); + pm.pollForUpdates(); assertEquals(45, mock.value); pm.endTask(); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ThreadSafeProgressMonitor.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ThreadSafeProgressMonitor.java index 9e8e256b0..ff85f9b8f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ThreadSafeProgressMonitor.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ThreadSafeProgressMonitor.java @@ -157,10 +157,7 @@ private void doUpdates() { } public void update(int completed) { - int old = pendingUpdates.getAndAdd(completed); - if (isMainThread()) - doUpdates(); - else if (old == 0) + if (0 == pendingUpdates.getAndAdd(completed)) process.release(); }