WorkQueue: Increment core pool size after task is in PARKED state

Incrementing the pool size after the state is set to PARKED is
preferred. This avoids a brief period where the core pool size has
been incremented, but the task that is about to be parked is still
in the READY state.

While we are at it, move the decrement of the core pool size closer
to the increment as it improves readability. This change also fixes
some flaky tests in TaskParkerIT.

Release-Notes: skip
Change-Id: I2ba10b8c72cb5d0054e095d8327f74ea5ddd1ae2
diff --git a/java/com/google/gerrit/server/git/WorkQueue.java b/java/com/google/gerrit/server/git/WorkQueue.java
index 6f904ea..60cbeed 100644
--- a/java/com/google/gerrit/server/git/WorkQueue.java
+++ b/java/com/google/gerrit/server/git/WorkQueue.java
@@ -636,15 +636,16 @@
 
     public void waitUntilReadyToStart(Task<?> task) {
       if (!listeners.isEmpty() && !isReadyToStart(task)) {
-        incrementCorePoolSizeBy(1);
         ParkedTask parkedTask = new ParkedTask(task);
         parked.offer(parkedTask);
         task.runningState.set(Task.State.PARKED);
+        incrementCorePoolSizeBy(1);
         try {
           parkedTask.latch.await();
         } catch (InterruptedException e) {
           logger.atSevere().withCause(e).log("Parked Task(%s) Interrupted", task);
           parked.remove(parkedTask);
+        } finally {
           incrementCorePoolSizeBy(-1);
         }
       }
@@ -702,7 +703,6 @@
       parked.addAll(notReady);
 
       if (ready != null) {
-        incrementCorePoolSizeBy(-1);
         ready.latch.countDown();
       }
     }