Bug 547416: [RJ-Servi] Fix interpretion of 'max usage count' parameter
for servi pools

Change-Id: If19cd214c27aaf9de78ee6acadebc7b74ebdc3ba
diff --git a/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java b/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
index 4b98634..4c6e074 100644
--- a/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
+++ b/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
@@ -35,6 +35,7 @@
 import org.eclipse.statet.jcommons.status.StatusException;
 
 import org.eclipse.statet.rj.RjException;
+import org.eclipse.statet.rj.data.RDataUtils;
 import org.eclipse.statet.rj.data.UnexpectedRDataException;
 import org.eclipse.statet.rj.server.util.RJContext;
 import org.eclipse.statet.rj.servi.RServi;
@@ -252,6 +253,30 @@
 		}
 	}
 	
+	@Test
+	public void UsageCount_borrowMax() throws RjException, OperationsException,
+			NoSuchElementException, LoginException, StatusException, UnexpectedRDataException,
+				InterruptedException {
+		final PoolConfig poolConfig= new PoolConfig();
+		poolConfig.setMaxTotalCount(1);
+		poolConfig.setMaxUsageCount(1);
+		this.server.setPoolConfig(poolConfig);
+		this.server.start();
+		
+		final RServi servi1= getServi("test1");
+		assertNodeOperative(servi1);
+		final int pid1= RDataUtils.checkSingleIntValue(servi1.evalData("Sys.getpid()", null));
+		closeServi(servi1);
+		
+		final RServi servi2= getServi("test2");
+		assertNodeOperative(servi2);
+		final int pid2= RDataUtils.checkSingleIntValue(servi2.evalData("Sys.getpid()", null));
+		
+		assertTrue(pid1 != pid2);
+		
+		closeServi(servi2);
+	}
+	
 	private void assertIdleCount(final int expected) throws InterruptedException {
 		final long t= System.nanoTime();
 		while (true) {
diff --git a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
index 38c5d39..f120285 100644
--- a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
+++ b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
@@ -193,7 +193,7 @@
 		}
 		
 		final int max= this.maxUsageCount;
-		if (max > 0 && ((DefaultPooledObject<?>) p).getBorrowedCount() > max) {
+		if (max > 0 && ((DefaultPooledObject<?>) p).getBorrowedCount() >= max) {
 			poolObj.stats.shutdownReason= Stats.MAX_USAGE;
 			return false;
 		}