From 0dd079fe8d74efa57f7b346dd356b6f68cc2f1d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 30 Apr 2012 16:34:09 +0200 Subject: Fix threading bug. --- .../src/main/java/com/orbekk/paxos/MasterProposer.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'same/src/main/java') diff --git a/same/src/main/java/com/orbekk/paxos/MasterProposer.java b/same/src/main/java/com/orbekk/paxos/MasterProposer.java index 3343988..58356a7 100644 --- a/same/src/main/java/com/orbekk/paxos/MasterProposer.java +++ b/same/src/main/java/com/orbekk/paxos/MasterProposer.java @@ -34,7 +34,7 @@ public class MasterProposer extends Thread { this.rpcf = rpcf; } - private static class ResponseHandler implements RpcCallback { + private class ResponseHandler implements RpcCallback { final int proposalNumber; final int numRequests; final AtomicInteger bestPromise = new AtomicInteger(); @@ -50,7 +50,6 @@ public class MasterProposer extends Thread { } @Override public void run(PaxosResponse response) { - numResponses.incrementAndGet(); if (response != null) { int result = response.getResult(); if (result == proposalNumber) { @@ -63,18 +62,17 @@ public class MasterProposer extends Thread { updated = bestPromise.compareAndSet(oldVal, update); } } + numResponses.incrementAndGet(); checkDone(); } private void checkDone() { - if (done.getCount() > 0) { - if (numPromises.get() > numRequests / 2) { - result.set(proposalNumber); - done.countDown(); - } else if (numResponses.get() >= numRequests) { - result.set(bestPromise.get()); - done.countDown(); - } + if (numPromises.get() > numRequests / 2) { + result.set(proposalNumber); + done.countDown(); + } else if (numResponses.get() >= numRequests) { + result.set(bestPromise.get()); + done.countDown(); } } -- cgit v1.2.3