HAMA-965: Infinite loop because of recursive function call

git-svn-id: https://svn.apache.org/repos/asf/hama/trunk@1692342 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index b689b5d..ead276d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,17 @@
 Hama Change Log
 
-Release 0.7.0 (unreleased changes)
+Release 0.7.1 (unreleased changes)
+
+  NEW FEATURES
+
+  BUG FIXES
+
+    HAMA-965: Infinite loop because of recursive function call (JongYoon Lim via edwardyoon)
+
+  IMPROVEMENTS
+
+
+Release 0.7.0 - Jun 14, 2015
 
   NEW FEATURES
 
diff --git a/core/src/main/java/org/apache/hama/bsp/message/HamaAsyncMessageManagerImpl.java b/core/src/main/java/org/apache/hama/bsp/message/HamaAsyncMessageManagerImpl.java
index 85f2790..913d20b 100644
--- a/core/src/main/java/org/apache/hama/bsp/message/HamaAsyncMessageManagerImpl.java
+++ b/core/src/main/java/org/apache/hama/bsp/message/HamaAsyncMessageManagerImpl.java
@@ -51,15 +51,20 @@
   private static final Log LOG = LogFactory
       .getLog(HamaAsyncMessageManagerImpl.class);
 
+  private static final int MAX_RETRY = 5;
+
   private AsyncServer server;
 
   private LRUCache<InetSocketAddress, HamaMessageManager<M>> peersLRUCache = null;
 
+  private static int retry = 0;
+
   @SuppressWarnings("serial")
   @Override
   public final void init(TaskAttemptID attemptId, BSPPeer<?, ?, ?, ?, M> peer,
       HamaConfiguration conf, InetSocketAddress peerAddress) {
     super.init(attemptId, peer, conf, peerAddress);
+    retry = 0;
     startRPCServer(conf, peerAddress);
     peersLRUCache = new LRUCache<InetSocketAddress, HamaMessageManager<M>>(
         maxCachedConnections) {
@@ -87,7 +92,6 @@
   }
 
   private void startServer(String hostName, int port) throws IOException {
-    int retry = 0;
     try {
       this.server = AsyncRPC.getServer(this, hostName, port,
           conf.getInt("hama.default.messenger.handler.threads.num", 5), false,
@@ -98,12 +102,10 @@
           + " port:" + server.getAddress().getPort());
     } catch (BindException e) {
       LOG.warn("Address already in use. Retrying " + hostName + ":" + port + 1);
-      startServer(hostName, port + 1);
-      retry++;
-
-      if (retry > 5) {
+      if (retry++ >= MAX_RETRY) {
         throw new RuntimeException("RPC Server could not be launched!");
       }
+      startServer(hostName, port + 1);
     }
   }