diff options
author | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-05-21 13:42:13 +0200 |
---|---|---|
committer | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-05-21 13:42:13 +0200 |
commit | f62786575d01811b4af057c35f8ed4c7a43a4429 (patch) | |
tree | d9ba14c2e3f9acbdafc4c0d5fb0cdd35ab56797c /same/src/main | |
parent | c8693857ceaf837cebf63a3e2d5e73dbfbfafd26 (diff) |
Fix race condition in MasterProposer.
Diffstat (limited to 'same/src/main')
-rw-r--r-- | same/src/main/java/com/orbekk/paxos/MasterProposer.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/same/src/main/java/com/orbekk/paxos/MasterProposer.java b/same/src/main/java/com/orbekk/paxos/MasterProposer.java index 129f336..7dc5090 100644 --- a/same/src/main/java/com/orbekk/paxos/MasterProposer.java +++ b/same/src/main/java/com/orbekk/paxos/MasterProposer.java @@ -82,11 +82,14 @@ public class MasterProposer extends Thread { } private void checkDone() { - if (numPromises.get() > numRequests / 2) { - result.set(proposalNumber); - done.countDown(); - } else if (numResponses.get() >= numRequests) { - result.set(bestPromise.get()); + if (numPromises.get() > numRequests / 2 || + numResponses.get() >= numRequests) { + // Test again to avoid race condition. + if (numPromises.get() > numRequests / 2) { + result.set(proposalNumber); + } else { + result.set(bestPromise.get()); + } done.countDown(); } } |